Returning JSON Data
APIs most commonly return JSON.
Returning dicts (Flask 2+)
Flask can automatically serialize dicts:
from flask import Flask
app = Flask(__name__)
@app.route("/api/status")
def api_status():
return {"status": "ok"}from flask import Flask
app = Flask(__name__)
@app.route("/api/status")
def api_status():
return {"status": "ok"}Using jsonify
jsonify()jsonify() gives you more control and is explicit:
from flask import Flask, jsonify
app = Flask(__name__)
@app.route("/api/user")
def api_user():
return jsonify(id=1, name="Ravi")from flask import Flask, jsonify
app = Flask(__name__)
@app.route("/api/user")
def api_user():
return jsonify(id=1, name="Ravi")Status codes
Return a tuple to include a status code:
@app.route("/api/create", methods=["POST"])
def api_create():
return {"created": True}, 201@app.route("/api/create", methods=["POST"])
def api_create():
return {"created": True}, 201Common pitfalls
- Returning objects that arenβt JSON-serializable (e.g., datetime)
- fix: convert to string or use a serializer
- Doing
return json.dumps(data)return json.dumps(data)without settingContent-Type: application/jsonContent-Type: application/json- fix: use dict return or
jsonifyjsonify
- fix: use dict return or
π§ͺ Try It Yourself
Exercise 1 β Create a Flask App
Exercise 2 β Dynamic Route
Exercise 3 β Return JSON
If this helped you, consider buying me a coffee β
Buy me a coffeeWas this page helpful?
Let us know how we did
