Оновлено на 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 пропонує вроджений 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
користувачем, default
як це:
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
)
Це Джанго позбавляє трохи даних:
"last_login": "2018-08-03T10:51:42.990", # DjangoJSONEncoder
"last_login": "2018-08-03T10:51:42.990239", # default
Таким чином, вам може знадобитися бути обережними щодо цього в деяких випадках.