Custom Encoder
Subclass json.JSONEncoder to serialise types that JSON does not natively support, such as datetime, Decimal, and dataclasses.
Subclass json.JSONEncoder to serialise types that JSON does not natively support, such as datetime, Decimal, and dataclasses.
import json
from datetime import datetime
from decimal import Decimal
class AppEncoder(json.JSONEncoder):
def default(self, obj):
if isinstance(obj, datetime):
return obj.isoformat()
if isinstance(obj, Decimal):
return float(obj)
if hasattr(obj, "__dict__"):
return obj.__dict__
return super().default(obj)
result = json.dumps({"ts": datetime.now(), "price": Decimal("19.99")}, cls=AppEncoder)
Call super().default(obj) at the end to raise TypeError for truly unsupported types.