Flask で有効な JSON 応答を返す

Salman Mehmood 2022年8月18日
Flask で有効な JSON 応答を返す

この説明では、Flask での JSON サポートと、Flask の jsonify() を使用して API を作成し、JSON 応答で返す方法について学習します。

Flask で jsonify() を使用して有効な JSON 応答を返す

JSON オブジェクトの型を Python 型にマッピングでき、辞書や配列のようにアクセスできるため、Flask で JSON を使用するのは非常に簡単です。JSON の基本に精通している場合は、これを理解できるはずです。

次に、Flask アプリをセットアップする必要があります。アプリを作成するためにいくつかの基本的なことを行っているだけで、次に単一のルートを作成します。

デコレータ内で route('truck/api/',methods=['GET']) である Get_Trucks() メソッドのルートを指定します。そして、Get_Trucks() メソッド内で、Trucks と呼ばれる辞書のリストを宣言し、それを直接返します。

@app.route("truck/api/", methods=["GET"])
def Get_Trucks():
    Trucks = [
        {"id": 1, "year": 2017, "model": ""},
        {"id": 2, "year": 2019, "model": ""},
        {"id": 3, "year": 2020, "model": ""},
        {"id": 4, "year": 2016, "model": ""},
    ]
    return Trucks

ここで、2つのケースを見ていきます。1つはオブジェクトの配列を返す場合、もう 1つは 1つのオブジェクトを単独で返す場合または 1つの辞書を返す場合です。

先に進んで、2 番目のものを見てみましょう。Truck_Details() という名前の関数を除いて、コードは同じです。

from flask import Flask

app = Flask(__name__)


@app.route("/truck/api/", methods=["GET"])
def Get_Trucks():
    Trucks = [
        {"id": 1, "year": 2017, "model": ""},
        {"id": 2, "year": 2019, "model": ""},
        {"id": 3, "year": 2020, "model": ""},
        {"id": 4, "year": 2016, "model": ""},
    ]
    return Trucks


@app.route("/truck-details/api/", methods=["GET"])
def Truck_Details():
    Details = {"id": 2, "year": 2019, "model": ""}
    return Details


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

次に、Flask アプリを実行して、ブラウザーに移動します。この最初のルートをテストしてみましょう。

Enter キーを押すと、タイプエラーが発生し、Python リストをブラウザに送信しようとしているため、view 関数が有効な応答を返さなかったことがわかります。

Flask リターン JSON 出力 1

Flask からもう 1つインポートすることで、これを非常に迅速に修正できます:jsonify()。これはビルトイン Flask です。サードパーティのモジュールを使用する必要はありません。

リストまたは配列を返す場所に移動し、それを jsonify() でラップします。これを保存してルートをもう一度テストすると、有効な JSON 応答が得られます。

これをネットワークインスペクターで見ると、アプリケーションのコンテンツタイプが JSON であることがわかります。

Flask リターン JSON 出力 2

jsonify() を使用せずに Flask から単一のオブジェクトを返す方法を見てみましょう。ブラウザで見てみましょう。

アップグレードされたバージョンを使用しているため、機能します。Flask バージョン 1.1.0 以降を使用している場合、view で辞書を返すときに辞書が自動的に JSON に変換されますが、Flask のバージョンが 1.1.0 未満の場合は、次のことができます。複数のオブジェクトを返す場合と同じです。

右側を見ると、コンテンツタイプが JSON であり、JSON ビューと呼ばれる Chrome 拡張機能を使用して応答データをプリティファイしていることがわかります。

Flask リターン JSON 出力 3

完全なソースコード:

from flask import Flask, jsonify

app = Flask(__name__)


@app.route("/truck/api/", methods=["GET"])
def Get_Trucks():
    Trucks = [
        {"id": 1, "year": 2017, "model": ""},
        {"id": 2, "year": 2019, "model": ""},
        {"id": 3, "year": 2020, "model": ""},
        {"id": 4, "year": 2016, "model": ""},
    ]
    return jsonify(Trucks)


@app.route("/truck-details/api/", methods=["GET"])
def Truck_Details():
    Details = {"id": 2, "year": 2019, "model": ""}
    return Details


if __name__ == "__main__":
    app.run(debug=True)
著者: Salman Mehmood
Salman Mehmood avatar Salman Mehmood avatar

Hello! I am Salman Bin Mehmood(Baum), a software developer and I help organizations, address complex problems. My expertise lies within back-end, data science and machine learning. I am a lifelong learner, currently working on metaverse, and enrolled in a course building an AI application with python. I love solving problems and developing bug-free software for people. I write content related to python and hot Technologies.

LinkedIn