Rückgabe einer gültigen JSON-Antwort in Flask

Salman Mehmood 15 Februar 2024
Rückgabe einer gültigen JSON-Antwort in Flask

Wir werden mit dieser Erklärung etwas über die JSON-Unterstützung in Flask lernen und wie man eine API erstellt und sie mit Hilfe von jsonify() in Flask als JSON-Antwort zurückgibt.

Rückgabe einer gültigen JSON-Antwort mit Hilfe von jsonify() in Flask

Die Verwendung von JSON mit Flask ist ziemlich einfach, da der Typ des JSON-Objekts Python-Typen zugeordnet werden kann und wir wie auf ein Wörterbuch oder Array darauf zugreifen können. Wenn Sie mit den Grundlagen von JSON vertraut sind, sollten Sie dies verstehen können.

Jetzt müssen wir eine Flask-App einrichten. Wir tun nur einige grundlegende Dinge, um eine App zu erstellen, und dann erstellen wir eine einzelne Route.

Wir werden eine Wurzel für die Methode Get_Trucks() angeben, die route('truck/api/',methods=['GET']) innerhalb des Decorators ist. Und innerhalb der Methode Get_Trucks() deklarieren wir eine Liste von Wörterbüchern mit dem Namen Trucks und geben sie direkt zurück.

@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

Nun werden wir uns zwei Fälle ansehen: Der erste gibt ein Array von Objekten zurück, und der zweite gibt nur ein Objekt oder ein Wörterbuch zurück.

Lassen Sie uns weitermachen und einen Blick auf die zweite werfen. Der Code ist bis auf eine Funktion namens Truck_Details() gleich.

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)

Jetzt führen wir die Flask-App aus und gehen zum Browser. Lassen Sie uns diese erste Route testen.

Wenn wir die Eingabetaste drücken, erhalten wir den Typfehler, in dem wir lesen können, dass die Funktion view keine gültige Antwort zurückgegeben hat, weil wir versuchen, eine Python-Liste an den Browser zu senden.

Flask Return JSON-Ausgabe 1

Wir können dies sehr schnell beheben, indem wir noch etwas aus Flask importieren: jsonify(). Dies ist eine eingebaute Flask; Wir müssen kein Modul eines Drittanbieters verwenden.

Wir gehen dorthin, wo wir unsere Liste oder unser Array zurückgeben, und packen es in jsonify(). Lassen Sie uns dies speichern und unsere Route erneut testen, und jetzt erhalten wir eine gültige JSON-Antwort.

Wenn wir uns dies im Netzwerkinspektor ansehen, können wir sehen, dass dies einen Inhaltstyp der Anwendung hat, der JSON ist.

Flask Return JSON-Ausgabe 2

Schauen wir uns die Rückgabe eines einzelnen Objekts aus dem Flask an, ohne jsonify() zu verwenden. Schauen wir es uns im Browser an.

Es funktioniert, weil wir eine aktualisierte Version verwenden. Wenn Sie die Flask-Version 1.1.0 oder höher verwenden, wird das Wörterbuch automatisch in JSON konvertiert, wenn es es in einer view zurückgibt, aber wenn Ihre Version von Flask kleiner als 1.1.0 ist, können Sie das tun dasselbe wie bei der Rückgabe mehrerer Objekte.

Wenn wir uns die rechte Seite ansehen, können wir sehen, dass der Inhaltstyp JSON ist, und wir verwenden nur eine Chrome-Erweiterung namens JSON View, um die Antwortdaten zu verschönern.

Flask Return JSON-Ausgabe 3

Vollständiger Quellcode:

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 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