How to Fix – “datetime.datetime not JSON serializable” in Python?
Last Updated :
05 Feb, 2023
In this article, we are going to learn how to fix the error “datetime.datetime not JSON serializable” in Python.
datetime.datetime is a class in the Python datetime module that represents a single point in time. This class is not natively supported by the JSON (JavaScript Object Notation) format, which means that we cannot serialize a datetime.datetime object directly to a JSON string using the JSON module in Python.
What is JSON serializable?
JSON (JavaScript Object Notation) is a lightweight data-interchange format that is easy to read and write and easy for machines to parse and generate. It is a way of representing data in a format that can be easily converted to and from JavaScript objects. JSON serialization refers to the process of converting a Python object into a JSON-formatted string. JSON-serializable means an object which can be represented in JSON format. For example, a Python dictionary can be easily converted to a JSON-formatted string using the JSON module:
Python3
import json
data = {
"name" : "John Smith" ,
"age" : 30 ,
"address" : {
"street" : "123 Main St" ,
"city" : "Anytown" ,
"state" : "CA" ,
"zip" : "12345"
},
"phoneNumbers" : [
{ "type" : "home" , "number" : "555-555-5555" },
{ "type" : "work" , "number" : "555-555-5555" }
]
}
json_data = json.dumps(data)
print (json_data)
|
Output:
{"name": "John Smith",
"age": 30,
"address": {"street": "123 Main St", "city": "Anytown", "state": "CA", "zip": "12345"},
"phoneNumbers": [{"type": "home", "number": "555-555-5555"},
{"type": "work", "number": "555-555-5555"}]}
To serialize a datetime.datetime object to JSON, you will need to convert it to a format that is compatible with JSON, such as a string.
Serialize a Python datetime.datetime object
If we are trying to serialize a Python datetime.datetime object using the json module and we are getting the error “TypeError: datetime.datetime not JSON serializable”, it means that the JSON module does not know how to convert the datetime object to a JSON-serializable format. Let us have a look at an example of this error.
Python3
import json
import datetime
now = datetime.datetime.now()
json.dumps(now)
|
Output:
Traceback (most recent call last):
File "c:\Users\Desktop\geekforgeeks\gfg6.py", line 5, in <module>
json.dumps(now)
File "C:\Users\AppData\Local\Programs\Python\Python39\lib\json\__init__.py", line 231, in dumps
return _default_encoder.encode(obj)
File "C:\Users\AppData\Local\Programs\Python\Python39\lib\json\encoder.py", line 199, in encode
chunks = self.iterencode(o, _one_shot=True)
File "C:\Users\AppData\Local\Programs\Python\Python39\lib\json\encoder.py", line 257, in iterencode
return _iterencode(o, 0)
File "C:\Users\AppData\Local\Programs\Python\Python39\lib\json\encoder.py", line 179, in default
raise TypeError(f'Object of type {o.__class__.__name__} '
TypeError: Object of type datetime is not JSON serializable
Method 1: Using the json.dumps() function
The json.dumps() is a function in the json module of Python that is used to convert a Python object into a JSON-formatted string. It takes an object as its argument and returns a string representation of the object in JSON format.
The datetime.datetime object in Python is not directly JSON serializable, meaning it cannot be converted to a JSON-formatted string using json.dumps without additional steps. To overcome this error, you can use the default argument of the json.dumps function to specify a custom function that will be called to handle non-serializable objects.
Python3
import json
import datetime
def serialize_datetime(obj):
if isinstance (obj, datetime.datetime):
return obj.isoformat()
raise TypeError( "Type not serializable" )
dt = datetime.datetime.now()
json_data = json.dumps(dt, default = serialize_datetime)
print (json_data)
|
Output: This will output a JSON-serialized string that represents the datetime object in ISO format (e.g. “2022-12-31T23:59:59.999999”). We can then use this string to send the datetime object over the network or store it in a file.
"2023-01-13T09:45:04.386958"
Method 2: Using the datetime module’s strftime() method
The strftime() method of the datetime module in Python is used to format a datetime object into a string representation. The method takes a format string as an argument, which defines the desired output format. The format codes used in the format string are similar to those used in the C library function strftime(). The formatted string can then be used for display, storage, or other purposes.
To use the strftime() method to convert a datetime object to a JSON serializable string, we have to first use the strftime() method to format the datetime object into a string with a desired format, and then pass the resulting string to the json.dumps() function.
Python3
import json
import datetime
dt = datetime.datetime.now()
dt_str = dt.strftime( "%Y-%m-%d %H:%M:%S" )
json_data = json.dumps(dt_str)
print (json_data)
|
Output: This will output a JSON-serialized string that represents the datetime object in the format “YYYY-MM-DD HH:MM:SS” (e.g. “2022-12-31 23:59:59”).
"2023-01-13 09:49:07"
Share your thoughts in the comments
Please Login to comment...