Working with JSON Files in Python

JSON (JavaScript Object Notation) is a lightweight, text-based format for data exchange. Python's built-in json module allows easy reading, writing, and manipulation of JSON data.

Key Features of the json Module

Example 1: Convert Python dict to JSON string

import json

data = {'name': 'Alice', 'age': 30, 'city': 'New York'}
json_str = json.dumps(data)
print(json_str)

Example 2: Convert JSON string to Python dict

import json

json_str = '{"name": "Bob", "age": 25, "city": "Chicago"}'
data = json.loads(json_str)
print(data['name'])

Example 3: Write JSON to a file

import json

data = {'name': 'John', 'age': 40, 'city': 'Boston'}
with open('data.json', 'w') as f:
    json.dump(data, f)

Example 4: Read JSON from a file

import json

with open('data.json', 'r') as f:
    data = json.load(f)
print(data)

Example 5: Pretty-print JSON string with indentation

import json

data = {'name': 'Eve', 'age': 22, 'languages': ['Python', 'JavaScript']}
json_str = json.dumps(data, indent=4)
print(json_str)

Example 6: JSON with non-ASCII characters

import json

data = {'name': 'José', 'city': 'München'}
json_str = json.dumps(data, ensure_ascii=False)
print(json_str)

Example 7: Serialize custom Python object

import json

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

def person_encoder(obj):
    if isinstance(obj, Person):
        return {'name': obj.name, 'age': obj.age}
    raise TypeError('Object not serializable')

p = Person('Anna', 28)
json_str = json.dumps(p, default=person_encoder)
print(json_str)

Example 8: Deserialize JSON to custom Python object

import json

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

def person_decoder(d):
    return Person(d['name'], d['age'])

json_str = '{"name": "Anna", "age": 28}'
p = json.loads(json_str, object_hook=person_decoder)
print(p.name, p.age)

Example 9: Handling JSON arrays

import json

json_str = '[{"name": "Alice"}, {"name": "Bob"}, {"name": "Charlie"}]'
data = json.loads(json_str)
for item in data:
    print(item['name'])

Example 10: Encoding Python sets (not supported natively)

import json

def set_encoder(obj):
    if isinstance(obj, set):
        return list(obj)
    raise TypeError('Type not serializable')

data = {'numbers': {1, 2, 3}}
json_str = json.dumps(data, default=set_encoder)
print(json_str)