Flask: ошибка Unicode при попытке разобрать полезную нагрузку POST

Я пытаюсь создать конечную точку Flask API, которая принимает URL-адрес изображения из полезной нагрузки JSON. Я использую flask.request.get_json(), который работал у меня раньше:

@app.route("/caption", methods=["POST"])
def caption():
    image_url = flask.request.get_json().get('image_url')
    image_info = get_caption(image_url)
    return flask.jsonify(image_info)

Однако при попытке отправить URL-адрес в конечную точку с типом содержимого application/json я получаю AttributeError: 'unicode' object has no attribute 'image_url'

Я попытался распечатать содержимое flask.request.get_json() и получил

{u'image_url': u'https://images.pexels.com/photos/66997/pexels-photo-66997.jpeg'}

Как я могу получить полезную нагрузку в виде словаря вместо объекта Unicode?

Я почти уверен, что вы ошиблись при тестировании, если flask.request.get_json() вернет опубликованный вами словарь.

zwer 14.05.2018 04:18

@zwer Я пробовал и curl, и Postman, и я использую тип содержимого application / json.

KeepingItClassy 14.05.2018 04:20
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
2
539
3

Ответы 3

Хотя я не думаю, что flask.request.get_json () вернет вам словарь, который вы опубликовали как @zwer, упомянутый. Но если вы действительно получите этот словарь. Постарайтесь сделать это, чтобы достичь своей цели.

import json
def caption():
    image_json = flask.request.get_json()
    image_url = json.loads(json.dumps(image_json)).get('image_url')

Похоже, вы используете python2 и можете распечатать результат, так почему бы не распечатать тип объекта словаря и не узнать его тип.

Я только что понял, что ошибка была в том, как я обработал image_url в моей функции get_caption. Сообщение об ошибке заставило меня поверить в то, что проблема была в разборе полезной нагрузки. Прошу прощения за недоразумение. Спасибо всем, кто ответил, вы помогли мне найти ошибку.

У меня была аналогичная проблема - рад, что словарь все еще может работать, даже если при печати он отображает 'u'.

Jeanne Lane 02.03.2019 01:37

Другие вопросы по теме