HOWTO · Flask

フラスコのjsonify

このガイドでは、jsonify とは何かを確認し、それをフラスコにダンプします。

このページの内容

このガイドでは、jsonifyとは何かを確認し、フラスコダンプします。 flask.jsonifyjson.dump の用途は何ですか?また、それらの違いは何ですか?

それでは、これ以上待たずに、飛び込みましょう。

flask.jsonify()json.dumps() の使用

flask.jsonify()json.dumps() はわずかな違いしかないため、混乱する人が増えているようです。

2つの機能の違いは、最初に思われるほど難しくありません。

これらの違いを簡単に理解できるようにするために、主な質問に答えてみましょう: json.dumps()flask.jsonify() はいつ使用する必要がありますか? しかしまず、json.dumps()とは何かを見てみましょう。

json.dumps() メソッド

まず、JSON ファイルの読み取りまたは書き込み中に、json パッケージを使用する必要があります。 このパッケージには、Python で記述されたデータを JSON ファイルに変換する json.dumps() という名前のメソッドが含まれています。

このメソッドは、Python で記述されたすべてのデータを変換し、JSON ファイルとして読み取られる文字列で返します。

json.dumps() メソッドの例は、都市のリストに名前を付けるために使用されます。

@app.route("/")  # display on "home" page
def list_of_cities_dumps():
    cities = [
        {"name": "Central City", "country": "USA"},
        {"name": "Ottawa", "country": "Canada"},
    ]
    return json.dumps(
        cities
    )  # json.dump() method is being used to call the list of cities


if __name__ == "__main__":
    app.run(debug=True)

出力:

[{'name': 'Central City', 'country': 'USA'}, {'name': 'Ottawa', 'country': 'Canada'}]

上記の例に示すように、都市のリストの出力が表示されます。 読み取り可能ですが、ユーザーが学校の生徒に関するデータを持っていると想像してください。

明確なデータ構成がないため、この方法を使用すると、学生を区別するのが難しくなります。

この欠陥を克服するために、flask.jsonify() 関数が導入されました。

flask.jsonify() 関数

flask.json モジュールでは、jsonify は Flask の関数です。 Flask フレームワークの使用時にデータを HTTP 応答として送信するには、flask.jsonify() 関数を使用する必要があります。

この関数を使用するには flask をインポートする必要があります。

次に、この関数はデータを JSON ファイルに変換し、応答オブジェクトを返します。これは、サーバーがクライアント要求に応答するために使用されます。

変換された JSON ファイルは、新しく作成された応答オブジェクトに追加されます。 content-type ヘッダー フィールドを application/JSON に設定すると、一般にメディア タイプとして知られる適切な MIME タイプも追加されます。

メディア タイプまたは MIME タイプと一緒にファイルを送信すると、メッセージとともにそのファイルのタイプが示されます。

上記と同じ例を参考にして、flask.jsonify() の動作をさらに理解しましょう。

@app.route("/")  # displays on the "home" page
def list_of_cities():
    cities = [
        {"name": "Central City", "country": "USA"},
        {"name": "Ottawa", "country": "Canada"},
    ]
    return jsonify(
        cities
    )  # the function jsonify is used here to call the list of cities


if __name__ == "__main__":
    app.run(debug=True)

出力:

[
  {
    "country": "USA",
    "name": "Central City"
  },
  {
    "country": "Canada",
    "name": "Ottawa"
  }
]

出力に示されているように、都市のリストの出力は整理されており、メソッド json.dumps() を使用した場合と比較して理解しやすくなっています。

以下のコードは、両方の例を組み合わせたものです。

from flask import Flask, jsonify
import json

app = Flask(__name__)


@app.route("/")
def list_of_cities():
    cities = [
        {"name": "Central City", "country": "USA"},
        {"name": "Ottawa", "country": "Canada"},
    ]
    return jsonify(cities)


@app.route("/1")
def list_of_cities_dumps():
    cities = [
        {"name": "Central City", "country": "USA"},
        {"name": "Ottawa", "country": "Canada"},
    ]
    return json.dumps(cities)


if __name__ == "__main__":
    app.run(debug=True)