📖 Scenario: You are building a simple web service that receives user data in JSON format. The service will read the JSON data sent in a POST request and extract specific information.
🎯 Goal: Create a Flask app that parses JSON data from a POST request and extracts the user's name and age.
📋 What You'll Learn
Create a Flask app instance named app
Define a route /user that accepts POST requests
Parse JSON data from the request using request.get_json()
Extract name and age from the JSON data
Return a simple string response confirming the received data
💡 Why This Matters
🌍 Real World
Web APIs often receive data in JSON format from clients. Parsing JSON requests is essential to handle user input or data submissions.
💼 Career
Backend developers frequently build REST APIs using Flask or similar frameworks that require JSON parsing to process client data.
Progress0 / 4 steps
1
Set up Flask app and import modules
Write the code to import Flask and request from flask. Then create a Flask app instance called app.
Flask
Hint
Use from flask import Flask, request and then app = Flask(__name__).
2
Create POST route to receive JSON
Define a route /user on app that accepts POST requests only. Use the decorator @app.route('/user', methods=['POST']).
Flask
Hint
Use @app.route('/user', methods=['POST']) and define a function user().
3
Parse JSON data from request
Inside the user function, get the JSON data from the request using data = request.get_json(). Then extract name and age from data.
Flask
Hint
Use data = request.get_json() then name = data['name'] and age = data['age'].
4
Return confirmation string with extracted data
Return a string from the user function that says Received user: {name}, age {age} using an f-string.
Flask
Hint
Use return f"Received user: {name}, age {age}" to send back the confirmation.
Practice
(1/5)
1. What is the correct Flask method to parse JSON data sent in a client request?
easy
A. request.data.json()
B. request.json()
C. request.parse_json()
D. request.get_json()
Solution
Step 1: Understand Flask request object
The Flask request object provides methods to access incoming request data.
Step 2: Identify JSON parsing method
The method get_json() is designed to parse JSON data from the request body safely.
Final Answer:
request.get_json() -> Option D
Quick Check:
JSON parsing method = request.get_json() [OK]
Hint: Use request.get_json() to read JSON data safely [OK]
Common Mistakes:
Using request.json() which is not a method
Trying to parse JSON from request.data directly
Using non-existent methods like parse_json()
2. Which of the following is the correct way to import and use JSON parsing in a Flask route?
easy
A. from flask import request
@app.route('/data')
def data():
data = request.get_json()
return data
B. import flask
@app.route('/data')
def data():
data = flask.request.json()
return data
C. from flask import request
@app.route('/data')
def data():
data = request.json
return data
D. from flask import request
@app.route('/data')
def data():
data = request.get_json
return data
Solution
Step 1: Check import and usage
Correct usage imports request from flask and calls request.get_json() as a method.
Step 2: Identify correct method call
from flask import request
@app.route('/data')
def data():
data = request.get_json()
return data correctly calls request.get_json() with parentheses to parse JSON.
Final Answer:
Option A code snippet -> Option A
Quick Check:
Correct import and method call = from flask import request
@app.route('/data')
def data():
data = request.get_json()
return data [OK]
Hint: Always call get_json() with parentheses after importing request [OK]
Common Mistakes:
Calling get_json without parentheses
Using request.json() which does not exist
Accessing request.json property which is not standard
3. Given this Flask route code, what will be the output if the client sends JSON {"name": "Alice"}?
from flask import Flask, request
app = Flask(__name__)
@app.route('/user', methods=['POST'])
def user():
data = request.get_json()
return f"Hello, {data['name']}!"
medium
A. "Hello, Alice!"
B. KeyError: 'name'
C. TypeError: 'NoneType' object is not subscriptable
D. SyntaxError
Solution
Step 1: Parse JSON from request
The client sends valid JSON with key "name" and value "Alice". request.get_json() parses it into a Python dict.
Step 2: Access dictionary key and return string
The code accesses data['name'] which exists, so it returns the formatted string "Hello, Alice!".
Final Answer:
"Hello, Alice!" -> Option A
Quick Check:
Valid JSON with 'name' key = "Hello, Alice!" [OK]
Hint: If JSON has key, get_json() returns dict to access keys [OK]
Common Mistakes:
Assuming get_json() returns None if JSON is missing
Not handling missing keys causing KeyError
Confusing get_json() with request.data string
4. What is the main issue with this Flask route when parsing JSON?
@app.route('/submit', methods=['POST'])
def submit():
data = request.get_json()
return data['email']
medium
A. request.get_json() is not a valid method
B. It may raise a KeyError if 'email' is missing in JSON
C. The route does not accept POST requests
D. It returns JSON instead of a string
Solution
Step 1: Analyze JSON key access
The code accesses data['email'] without checking if 'email' exists in the JSON data.
Step 2: Identify potential error
If the client sends JSON without 'email', this causes a KeyError and crashes the route.
Final Answer:
It may raise a KeyError if 'email' is missing in JSON -> Option B
Quick Check:
Missing key access causes KeyError = It may raise a KeyError if 'email' is missing in JSON [OK]
Hint: Always check keys exist before accessing JSON data [OK]
Common Mistakes:
Assuming get_json() always returns dict with all keys
Not handling missing or invalid JSON gracefully
Confusing method errors with key errors
5. How can you modify this Flask route to safely parse JSON and handle missing or invalid JSON without crashing?
@app.route('/info', methods=['POST'])
def info():
data = request.get_json()
return data['id']
hard
A. Add if 'id' in data: without checking if data is None
B. Replace get_json() with request.json() to avoid errors
C. Use data = request.get_json(silent=True) and check if data is None before accessing keys
D. Use request.get_json(force=True) to force JSON parsing
Solution
Step 1: Use silent=True to avoid exceptions
Calling request.get_json(silent=True) returns None instead of raising an error if JSON is missing or invalid.
Step 2: Check if data is None before accessing keys
Before accessing data['id'], check if data is not None to avoid crashes.
Final Answer:
Use data = request.get_json(silent=True) and check for None -> Option C