SyntaxStudy
Sign Up
Python Intermediate 4 min read

Custom JSON Encoder

Custom Encoder

Subclass json.JSONEncoder to serialise types that JSON does not natively support, such as datetime, Decimal, and dataclasses.

Example
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)
Pro Tip

Call super().default(obj) at the end to raise TypeError for truly unsupported types.