Robert Johns | 10 Feb, 2025
Fact checked by Jim Markus

Python JSON | Docs With Examples

JSON (JavaScript Object Notation) is a widely used format for storing and exchanging data between applications.

Python provides built-in support for working with JSON through the json module, making it easy to parse, generate, and manipulate JSON data.

Importing the json Module

To work with JSON in Python, we must first import the json module, which is nice and easy:

import json

Converting Python Objects to JSON (Serialization)

Serialization (otherwise known as encoding) is when we convert Python objects into a JSON-formatted string using json.dumps(). Since JSON is structured similarly to Python dictionaries, we typically use dictionaries to store data before encoding it to JSON format:

import json

data = {"name": "Alice", "age": 25, "city": "New York"}
json_string = json.dumps(data)
print(json_string)

Output:

{"name": "Alice", "age": 25, "city": "New York"}

Formatting JSON Output

You can also make JSON output more readable using the indent parameter (I do this all the time when working with JSON):

print(json.dumps(data, indent=4))

Output:

{
    "name": "Alice",
    "age": 25,
    "city": "New York"
}

Converting JSON to Python Objects (Deserialization)

Deserialization (also known as decoding) converts a JSON string into a Python object using json.loads().

Since JSON objects closely resemble Python dictionaries, deserializing JSON data converts it into a Python dictionary. This means means we can index values using keys, just like we would with any dictionary:

json_data = '{"name": "Alice", "age": 25, "city": "New York"}'
python_dict = json.loads(json_data)
print(python_dict["name"])

Output:

Alice

Understanding Serialization vs. Deserialization

Serialization and deserialization are two key concepts when working with JSON:

  • Serialization (also called encoding) is the process of converting Python objects, like dictionaries, lists, and other data structures, into a JSON string. This makes it easy to store or transmit data.

  • Deserialization (also called decoding) is the process of converting a JSON-formatted string back into a Python object, allowing the data to be manipulated in a program.

Think of serialization as "packing" Python data into a structured format for storage or sharing, while deserialization is "unpacking" that data back into a usable Python object.

Reading and Writing JSON Files

Writing JSON to a File

If we need to write out some JSON to a file, we use json.dump():

with open("data.json", "w") as file:
    json.dump(data, file, indent=4)

Explanation: Using with open() ensures the file is properly closed after writing via a Python context manager.

Reading JSON from a File

if we need to read in JSON from a file, we need to use json.load():

with open("data.json", "r") as file:
    loaded_data = json.load(file)
print(loaded_data)

Handling JSON Arrays

JSON natively supports arrays, which we can map to Python lists, as these are the Python equivalent of an array. We can then index the items like we would with a standard Python list:

json_array = '[{"name": "Alice"}, {"name": "Bob"}]'
people = json.loads(json_array)
print(people[1]["name"])

Output:

Bob

Custom Serialization with default

Sometimes, you may need to serialize custom Python objects that are not natively supported by JSON. To do this, you can define a custom function that converts objects into dictionaries before serialization:

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

def person_to_dict(obj):
    return obj.__dict__

person = Person("Alice", 25)
print(json.dumps(person, default=person_to_dict))

Output:

{"name": "Alice", "age": 25}

Explanation:

  • Python’s built-in json.dumps() doesn’t know how to handle a custom object like Person.

  • The default=person_to_dict parameter tells json.dumps() to use the person_to_dict function to convert objects into dictionaries before serialization.

  • The __dict__ attribute of the object provides its properties in a dictionary format.

This approach allows you to serialize any Python object as long as you define a function that converts it into a JSON-compatible dictionary.

Key Takeaways

  • Use Python dictionaries to encode data into JSON format before serialization.

  • Serialization converts Python objects to JSON for storage or sharing.

  • Deserialization converts JSON back into Python objects for processing.

  • Use json.dumps() to convert Python dictionaries to JSON strings.

  • Use json.loads() to parse JSON strings into Python dictionaries.

  • Read and write JSON files with json.dump() and json.load().

  • Format JSON output with indent for readability in your Python projects.

  • Serialize custom objects using default when working with non-serializable objects.

Practice Exercise

Here's a simple challenger, write a program in your Python editor that loads a JSON file containing a list of users and prints their names:

import json

with open("users.json", "r") as file:
    users = json.load(file)

for user in users:
    print(user["name"])

Wrapping Up

Python’s json module makes working with JSON easy and efficient. Whether you're dealing with APIs, storing configuration data, or handling structured information, mastering JSON in Python is a valuable skill.

Understanding serialization and deserialization helps ensure data is structured properly when sharing it between different parts of a program or between systems. By learning how to handle custom objects, you can extend the power of JSON serialization in Python. Happy coding!

By Robert Johns

Technical Editor for Hackr.io | 15+ Years in Python, Java, SQL, C++, C#, JavaScript, Ruby, PHP, .NET, MATLAB, HTML & CSS, and more... 10+ Years in Networking, Cloud, APIs, Linux | 5+ Years in Data Science | 2x PhDs in Structural & Blast Engineering

View all post by the author

Subscribe to our Newsletter for Articles, News, & Jobs.

I accept the Terms and Conditions.

Disclosure: Hackr.io is supported by its audience. When you purchase through links on our site, we may earn an affiliate commission.

In this article

Learn More

Please login to leave comments