Skip to Content
Course content

10.2 Parsing JSON Responses

JSON (JavaScript Object Notation) is a widely used data format for APIs because of its simplicity and human-readable structure. When you interact with APIs, the response is often in JSON format, and it’s important to know how to parse this data into a format you can work with in Python (usually as a dictionary or list).

Here’s how you can parse JSON responses in Python using the requests library.

1. Making a Request and Receiving a JSON Response

When you send an HTTP request using the requests library, you can retrieve a JSON response and parse it directly into a Python object.

Example:

import requests

url = "https://api.example.com/data"

# Send a GET request to the API
response = requests.get(url)

# Check if the request was successful (status code 200)
if response.status_code == 200:
    # Parse the JSON response into a Python dictionary
    data = response.json()

    # Print the parsed data
    print(data)
else:
    print(f"Failed to retrieve data. Status code: {response.status_code}")

Explanation:

  • response.json() is used to parse the JSON response into a Python dictionary (if the JSON is an object) or a list (if the JSON is an array).
  • You can then work with the parsed data just like any other Python object (e.g., dictionary, list).

2. Accessing Data from the JSON Response

After parsing the JSON response into a Python dictionary or list, you can access specific data points using standard Python methods.

Example 1: Accessing Dictionary Keys

import requests

url = "https://api.example.com/data"

response = requests.get(url)

if response.status_code == 200:
    data = response.json()
    
    # Accessing data by key (assuming the response is a dictionary)
    item_name = data['name']  # Access value associated with the 'name' key
    item_price = data['price']  # Access value associated with the 'price' key
    
    print(f"Item Name: {item_name}, Item Price: {item_price}")
else:
    print(f"Failed to retrieve data. Status code: {response.status_code}")

Example 2: Iterating Through a List

If the JSON response is an array (list), you can iterate over the list to extract values.

import requests

url = "https://api.example.com/products"

response = requests.get(url)

if response.status_code == 200:
    data = response.json()

    # Assuming the response is a list of products
    for product in data:
        name = product['name']
        price = product['price']
        print(f"Product: {name}, Price: {price}")
else:
    print(f"Failed to retrieve data. Status code: {response.status_code}")

3. Handling Nested JSON Responses

Many JSON responses contain nested objects or arrays. To access data in a nested structure, you need to use multiple keys or indices to traverse the structure.

Example of Nested JSON:

{
    "product": {
        "name": "Laptop",
        "price": 1200,
        "specs": {
            "ram": "16GB",
            "processor": "Intel i7"
        }
    }
}

Code to Parse Nested JSON:

import requests

url = "https://api.example.com/product"

response = requests.get(url)

if response.status_code == 200:
    data = response.json()
    
    # Accessing nested keys
    product_name = data['product']['name']
    product_price = data['product']['price']
    product_ram = data['product']['specs']['ram']
    
    print(f"Product Name: {product_name}")
    print(f"Product Price: {product_price}")
    print(f"RAM: {product_ram}")
else:
    print(f"Failed to retrieve data. Status code: {response.status_code}")

4. Error Handling and Robust Parsing

It's important to handle potential errors during the parsing process, such as missing keys or invalid JSON.

Example of Handling Missing Keys Using .get()

import requests

url = "https://api.example.com/product"

response = requests.get(url)

if response.status_code == 200:
    data = response.json()

    # Using .get() to safely access keys
    product_name = data.get('product', {}).get('name', 'Unknown')
    product_price = data.get('product', {}).get('price', 'N/A')

    print(f"Product Name: {product_name}")
    print(f"Product Price: {product_price}")
else:
    print(f"Failed to retrieve data. Status code: {response.status_code}")

Explanation:

  • .get() is used to safely access dictionary keys. If the key doesn't exist, it returns a default value (e.g., 'Unknown' or 'N/A') instead of raising an exception.

5. Converting Python Data Back to JSON

Once you’ve worked with the data, you may want to send it back to the server or save it to a file. To do this, you can convert the Python object back into JSON format using the json module.

import json

# Python dictionary
data = {
    "name": "Laptop",
    "price": 1200,
    "specs": {
        "ram": "16GB",
        "processor": "Intel i7"
    }
}

# Convert Python dictionary to JSON string
json_data = json.dumps(data)

# Print JSON string
print(json_data)

Explanation:

  • json.dumps() converts a Python object (e.g., dictionary or list) into a JSON-formatted string, which can be sent back via a request or saved in a file.

Summary of Key Concepts:

  1. Parsing JSON: Use response.json() to convert a JSON response into a Python object.
  2. Accessing Data: Access data using standard Python indexing or dictionary keys.
  3. Nested JSON: Handle nested JSON structures by accessing keys at multiple levels.
  4. Error Handling: Use .get() to safely access dictionary keys, avoiding errors for missing keys.
  5. Converting to JSON: Use json.dumps() to convert Python objects back into JSON format.

By following these techniques, you can easily parse and manipulate JSON responses from APIs, making it easier to integrate data from external services into your Python applications.

Commenting is not enabled on this course.