json.dumps vs flask.jsonify - PullRequest
       1

json.dumps vs flask.jsonify

223 голосов
/ 26 октября 2011

Я не уверен, что понимаю цель метода 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.Что я делаю не так?

Ответы [ 4 ]

304 голосов
/ 01 ноября 2012

Функция jsonify() в фляге возвращает объект flask.Response(), который уже имеет соответствующий заголовок типа содержимого 'application / json' для использования с ответами json.Принимая во внимание, что метод json.dumps() просто вернет закодированную строку, для чего потребуется вручную добавить заголовок типа MIME.

Подробнее о функции jsonify() здесь для полной справки.

Редактировать: Также я заметил, что jsonify() обрабатывает kwargs или словари, в то время как json.dumps() дополнительно поддерживает списки и другие.

87 голосов
/ 26 октября 2011

Вы можете сделать:

flask.jsonify(**data)

или

flask.jsonify(id=str(album.id), title=album.title)
71 голосов
/ 15 апреля 2013

Это 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().

29 голосов
/ 18 марта 2014

Выбор того или другого зависит от того, что вы намерены делать.Из того, что я понимаю:

  • jsonify было бы полезно, когда вы создаете API, кто-то будет запрашивать и ожидать json в ответ.Например: API REST github может использовать этот метод для ответа на ваш запрос.

  • dumps , больше о форматировании объекта data / python в json и работе над ним внутриваше приложение.Например, мне нужно передать объект на мой уровень представления, где какой-то JavaScript будет отображать график.Вы добавите в Javascript Json, сгенерированный дампами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...