Custom Encoders (JSONEncoder)¶
Extend JSONEncoder to handle custom Python objects that aren't JSON serializable by default.
Creating Custom Encoders¶
Subclass JSONEncoder to handle custom types.
import json
from datetime import datetime
class DateTimeEncoder(json.JSONEncoder):
def default(self, obj):
if isinstance(obj, datetime):
return obj.isoformat()
return super().default(obj)
data = {
"event": "Conference",
"date": datetime(2024, 12, 25, 14, 30)
}
json_str = json.dumps(data, cls=DateTimeEncoder)
print(json_str)
{"event": "Conference", "date": "2024-12-25T14:30:00"}
Using default Parameter¶
Use the default parameter for simpler custom encoding.
import json
from datetime import date
def encode_date(obj):
if isinstance(obj, date):
return obj.isoformat()
raise TypeError(f"Object of type {type(obj)} is not JSON serializable")
data = {
"name": "Alice",
"birth_date": date(1990, 5, 15)
}
json_str = json.dumps(data, default=encode_date)
print(json_str)
{"name": "Alice", "birth_date": "1990-05-15"}