timedelta is not json serializable
时间: 2023-11-16 18:46:02 浏览: 150
timedelta对象是datetime模块中的一个类,用于计算两个datetime对象之间的差值。然而,timedelta对象在序列化为JSON格式时会引发"timedelta is not JSON serializable"错误。这是因为JSON序列化默认不支持datetime模块中的日期和时间对象。
解决这个问题的方法之一是创建一个自定义的JSON编码器类(如引用中的DateEncoder类),并在其中对timedelta对象进行特殊处理。通过重写JSONEncoder类的default方法,我们可以将timedelta对象转换为字符串形式的表示,以便能够被JSON序列化。
以下是一个示例代码,展示了如何使用DateEncoder类来序列化包含timedelta对象的字典:
```python
import datetime
import json
class DateEncoder(json.JSONEncoder):
def default(self, obj):
if isinstance(obj, datetime.datetime):
return obj.strftime("%Y-%m-%d %H:%M:%S")
elif isinstance(obj, datetime.timedelta):
return str(obj)
return super().default(obj)
dic = {'name':'jack', 'create_time': datetime.datetime(2019, 3, 19, 10, 6, 6), 'duration': datetime.timedelta(days=5)}
json_str = json.dumps(dic, cls=DateEncoder)
print(json_str)
```
在上述代码中,我们在DateEncoder类的default方法中添加了对timedelta对象的处理逻辑。通过调用`str(obj)`将timedelta对象转换为字符串表示。然后,我们使用`json.dumps`函数将字典对象转换为JSON字符串。
阅读全文