web-dev-qa-db-ja.com

json.dumpsと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が返すものにもっと似た結果を得る必要があります。何がおかしいのですか?

220
Sergei Basharov

Flaskのjsonify()関数は、jsonレスポンスで使用するための適切なcontent-typeヘッダー「application/json」をすでに持っているflask.Response()オブジェクトを返します。一方、json.dumps()メソッドはエンコードされた文字列を返すだけなので、手動でMIMEタイプヘッダを追加する必要があります。

詳しくは、jsonify()関数 の詳細 をご覧ください。

編集:また、jsonify()はリストやその他のものをサポートしていますが、json.dumps()はクワルグや辞書を扱うことに気づきました。

302
Kenneth Wilke

できるよ:

flask.jsonify(**data)

または

flask.jsonify(id=str(album.id), title=album.title)
86
mikerobi

これは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_appFlask()オブジェクト、つまりあなたのアプリケーションへの参照です。 response_class()Response()クラスへの参照です。

70
Michael Ekoka

どちらを選択するかは、あなたがやろうとしていることによって異なります。私が理解したことから:

  • jsonifyは、誰かがクエリを行い、jsonの見返りを期待するようなAPIを構築するときに役立ちます。例:REST github APIはこのメソッドを使ってあなたの要求に答えることができます。

  • ダンプは、data/pythonオブジェクトをjsonにフォーマットしてアプリケーション内で処理することについての詳細です。たとえば、JavaScriptを使用してグラフを表示するオブジェクトを表示レイヤに渡す必要があります。ダンプによって生成されたJsonを使用してJavaScriptをフィードします。

29
chaiyachaiya