Last modified: Nov 06, 2024 By Alexander Williams

Writing JSON to File in Python

Working with JSON files is a common task in Python programming. This guide will show you how to effectively write JSON data to files using Python's built-in json module.

Basic JSON File Writing

To write JSON data to a file in Python, we first need to import the json module. The most straightforward way is using the json.dump() method.


import json

data = {
    "name": "John Doe",
    "age": 30,
    "city": "New York"
}

with open('data.json', 'w') as file:
    json.dump(data, file)

Writing Formatted JSON

For better readability, you might want to write formatted JSON with proper indentation. You can achieve this using the indent parameter in json.dump().


import json

data = {
    "name": "John Doe",
    "age": 30,
    "city": "New York"
}

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

The output file will contain nicely formatted JSON data. For more details on pretty printing JSON, check out our Python Pretty Print JSON Guide.

Handling Complex Data Types

When working with complex data types, you might need to convert Python objects to JSON-serializable format. The json.dumps() function can help with this conversion.


import json
from datetime import datetime

data = {
    "name": "John Doe",
    "timestamp": datetime.now(),
    "items": [1, 2, 3]
}

def datetime_handler(obj):
    if isinstance(obj, datetime):
        return obj.isoformat()
    raise TypeError(f"Object of type {type(obj)} is not JSON serializable")

with open('complex_data.json', 'w') as file:
    json.dump(data, file, default=datetime_handler, indent=4)

Appending to JSON Files

Sometimes you need to add new data to an existing JSON file. This requires reading the existing content first, then writing the updated data. For more details, see our guide on How to Append Objects to JSON in Python.


import json

# Read existing data
with open('data.json', 'r') as file:
    existing_data = json.load(file)

# Add new data
new_item = {"name": "Jane Doe", "age": 25}
existing_data["new_person"] = new_item

# Write updated data
with open('data.json', 'w') as file:
    json.dump(existing_data, file, indent=4)

Error Handling

It's important to implement proper error handling when writing JSON files. Here's an example showing best practices for error handling:


import json

try:
    data = {
        "name": "John Doe",
        "age": 30
    }
    
    with open('data.json', 'w') as file:
        json.dump(data, file, indent=4)
except IOError as e:
    print(f"Error writing to file: {e}")
except json.JSONDecodeError as e:
    print(f"Error encoding JSON: {e}")

Working with Different Character Encodings

When dealing with special characters, you might need to specify the encoding. The ensure_ascii parameter can be useful for handling non-ASCII characters.


import json

data = {
    "name": "José García",
    "city": "São Paulo"
}

with open('international_data.json', 'w', encoding='utf-8') as file:
    json.dump(data, file, ensure_ascii=False, indent=4)

Conclusion

Writing JSON to files in Python is straightforward using the built-in json module. Remember to handle errors properly and consider formatting options for better readability.

For more advanced JSON operations, you might want to explore our guides on Python JSON dumps and converting Python dictionaries to JSON.