Я пытаюсь создать конечную точку 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?
@zwer Я пробовал и curl, и Postman, и я использую тип содержимого application / json.






Хотя я не думаю, что 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'.
Я почти уверен, что вы ошиблись при тестировании, если
flask.request.get_json()вернет опубликованный вами словарь.