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
が返すものにもっと似た結果を得る必要があります。何がおかしいのですか?
Flaskのjsonify()
関数は、jsonレスポンスで使用するための適切なcontent-typeヘッダー「application/json」をすでに持っているflask.Response()
オブジェクトを返します。一方、json.dumps()
メソッドはエンコードされた文字列を返すだけなので、手動でMIMEタイプヘッダを追加する必要があります。
詳しくは、jsonify()
関数 の詳細 をご覧ください。
編集:また、jsonify()
はリストやその他のものをサポートしていますが、json.dumps()
はクワルグや辞書を扱うことに気づきました。
できるよ:
flask.jsonify(**data)
または
flask.jsonify(id=str(album.id), title=album.title)
これは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()
クラスへの参照です。
どちらを選択するかは、あなたがやろうとしていることによって異なります。私が理解したことから:
jsonifyは、誰かがクエリを行い、jsonの見返りを期待するようなAPIを構築するときに役立ちます。例:REST github APIはこのメソッドを使ってあなたの要求に答えることができます。
ダンプは、data/pythonオブジェクトをjsonにフォーマットしてアプリケーション内で処理することについての詳細です。たとえば、JavaScriptを使用してグラフを表示するオブジェクトを表示レイヤに渡す必要があります。ダンプによって生成されたJsonを使用してJavaScriptをフィードします。