TypeError: Object of type datetime is not JSON serializable

Loading

The error “TypeError: Object of type datetime is not JSON serializable” occurs when you try to serialize a Python datetime object into JSON format using json.dumps(). The json module does not natively support datetime objects.


Fixing the Error: Step-by-Step Solutions

1. Convert datetime to String (Recommended)

Use isoformat() to convert datetime to a string before serialization:

import json
from datetime import datetime

data = {"timestamp": datetime.now()}

# Convert datetime to string
data["timestamp"] = data["timestamp"].isoformat()

json_data = json.dumps(data)
print(json_data)

Output (ISO format):

{"timestamp": "2025-03-12T14:30:45.678900"}

2. Use a Custom JSON Encoder

If you frequently deal with datetime objects, create a custom encoder:

class DateTimeEncoder(json.JSONEncoder):
def default(self, obj):
if isinstance(obj, datetime):
return obj.isoformat()
return super().default(obj)

json_data = json.dumps(data, cls=DateTimeEncoder)
print(json_data)

3. Manually Convert datetime Before Encoding

Modify your data dictionary before passing it to json.dumps():

data = {"timestamp": str(datetime.now())}  # Convert to string
json_data = json.dumps(data)
print(json_data)

4. Use orjson (Fast Alternative)

If performance is a concern, use orjson, which supports datetime natively:

import orjson

data = {"timestamp": datetime.now()}
json_data = orjson.dumps(data).decode()
print(json_data)

Summary of Solutions

MethodCode ExampleOutput
Convert to Stringdata["timestamp"] = datetime.now().isoformat()"2025-03-12T14:30:45.678900"
Custom Encoderjson.dumps(data, cls=DateTimeEncoder)"2025-03-12T14:30:45.678900"
Manual Conversionstr(datetime.now())"2025-03-12 14:30:45.678900"
Use orjsonorjson.dumps(data).decode()"2025-03-12T14:30:45.678900"

Leave a Reply

Your email address will not be published. Required fields are marked *