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 からもう 1つインポートすることで、これを非常に迅速に修正できます:jsonify()
。これはビルトイン Flask です。サードパーティのモジュールを使用する必要はありません。
リストまたは配列を返す場所に移動し、それを jsonify()
でラップします。これを保存してルートをもう一度テストすると、有効な JSON 応答が得られます。
これをネットワークインスペクターで見ると、アプリケーションのコンテンツタイプが JSON であることがわかります。
jsonify()
を使用せずに Flask から単一のオブジェクトを返す方法を見てみましょう。ブラウザで見てみましょう。
アップグレードされたバージョンを使用しているため、機能します。Flask バージョン 1.1.0 以降を使用している場合、view
で辞書を返すときに辞書が自動的に JSON に変換されますが、Flask のバージョンが 1.1.0 未満の場合は、次のことができます。複数のオブジェクトを返す場合と同じです。
右側を見ると、コンテンツタイプが JSON であり、JSON ビューと呼ばれる Chrome 拡張機能を使用して応答データをプリティファイしていることがわかります。
完全なソースコード:
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)
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