Json.dumps vs flask.jsonify
Я не уверен, что понимаю цель метода flask.jsonify
. Я пытаюсь сделать строку json из этого:
data = {"id": str(album.id), "title": album.title}
но то, что я получаю с json.dumps
, отличается от того, что я получаю с flask.jsonify
.
json.dumps(data): [{"id": "4ea856fd6506ae0db42702dd", "title": "Business"}]
flask.jsonify(data): {"id":…, "title":…}
Очевидно, мне нужно получить результат, который больше похож на то, что возвращает json.dumps
. Что я делаю неправильно?
Ответы
Ответ 1
Функция jsonify()
в фляге возвращает объект flask.Response()
, который уже имеет соответствующий заголовок типа содержимого 'application/json' для использования с json-ответами, тогда как json.dumps()
просто возвращает закодированную строку, что потребует вручную добавив заголовок типа mime.
Подробнее о функции jsonify()
здесь для полной справки.
Изменить:
Кроме того, я заметил, что jsonify()
обрабатывает kwargs или словари, а json.dumps()
дополнительно поддерживает списки и другие.
Ответ 2
Вы можете сделать:
flask.jsonify(**data)
или
flask.jsonify(id=str(album.id), title=album.title)
Ответ 3
Это flask.jsonify()
def jsonify(*args, **kwargs):
if __debug__:
_assert_have_json()
return current_app.response_class(json.dumps(dict(*args, **kwargs),
indent=None if request.is_xhr else 2), mimetype='application/json')
Используемый модуль json
- это simplejson
или json
в этом порядке. current_app
является ссылкой на объект Flask()
, т.е. ваше приложение. response_class()
является ссылкой на класс Response()
.
Ответ 4
Выбор того или иного зависит от того, что вы намереваетесь сделать.
Из того, что я действительно понимаю:
-
jsonify будет полезна, когда вы создаете API, который будет запрашивать и ожидать json взамен. Например: API-адрес REST github может использовать этот метод для ответа на ваш запрос.
-
dumps, больше о создании объекта данных /python в json и работе над ним внутри вашего приложения. Например, мне нужно передать объект на мой уровень представления, где некоторый javascript отобразит график. Вы будете комбинировать javascript с Json, сгенерированным дампами.