![]()
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
| Method | Code Example | Output |
|---|---|---|
| Convert to String | data["timestamp"] = datetime.now().isoformat() | "2025-03-12T14:30:45.678900" |
| Custom Encoder | json.dumps(data, cls=DateTimeEncoder) | "2025-03-12T14:30:45.678900" |
| Manual Conversion | str(datetime.now()) | "2025-03-12 14:30:45.678900" |
Use orjson | orjson.dumps(data).decode() | "2025-03-12T14:30:45.678900" |
