2018年更新
最初的答案适应了MongoDB“date”字段的表示方式:
{" $日期":1506816000000}
如果你想要一个通用的Python解决方案来将datetime序列化为json,请查看@jjmontes的答案,这是一个不需要依赖的快速解决方案。
当你在使用mongoengine(每个注释)而pymongo是一个依赖时,pymongo有内置的实用工具来帮助json序列化:
http://api.mongodb.org/python/1.10.1/api/bson/json_util.html
示例用法(序列化):
from bson import json_util
import json
json.dumps(anObject, default=json_util.default)
示例用法(反序列化):
json.loads(aJsonString, object_hook=json_util.object_hook)
Django
Django提供了一个原生的DjangoJSONEncoder序列化器来正确地处理这类问题。
看到https://docs.djangoproject.com/en/dev/topics/serialization/ djangojsonencoder
from django.core.serializers.json import DjangoJSONEncoder
return json.dumps(
item,
sort_keys=True,
indent=1,
cls=DjangoJSONEncoder
)
我注意到DjangoJSONEncoder和使用自定义默认之间的一个区别:
import datetime
import json
def default(o):
if isinstance(o, (datetime.date, datetime.datetime)):
return o.isoformat()
return json.dumps(
item,
sort_keys=True,
indent=1,
default=default
)
Django剥离了一些数据:
"last_login": "2018-08-03T10:51:42.990", # DjangoJSONEncoder
"last_login": "2018-08-03T10:51:42.990239", # default
所以,在某些情况下,你可能需要小心。