Aktualisiert für 2018
Die ursprüngliche Antwort entsprach der Darstellung der MongoDB-Datumsfelder als:
{"$date": 1506816000000}
Wenn Sie eine generische Python-Lösung für die Serialisierung datetime
nach json wünschen , lesen Sie die Antwort von @jjmontes, um eine schnelle Lösung zu finden, für die keine Abhängigkeiten erforderlich sind.
Da Sie Mongoengine verwenden (laut Kommentaren) und Pymongo eine Abhängigkeit ist, verfügt Pymongo über integrierte Dienstprogramme, die bei der JSON-Serialisierung helfen:
http://api.mongodb.org/python/1.10.1/api/bson/json_util.html
Anwendungsbeispiel (Serialisierung):
from bson import json_util
import json
json.dumps(anObject, default=json_util.default)
Anwendungsbeispiel (Deserialisierung):
json.loads(aJsonString, object_hook=json_util.object_hook)
Django
Django bietet einen nativen DjangoJSONEncoder
Serializer, der diese Art von richtig behandelt.
Siehe https://docs.djangoproject.com/de/dev/topics/serialization/#djangojsonencoder
from django.core.serializers.json import DjangoJSONEncoder
return json.dumps(
item,
sort_keys=True,
indent=1,
cls=DjangoJSONEncoder
)
Ein Unterschied, den ich zwischen der DjangoJSONEncoder
Verwendung eines solchen Brauchs festgestellt habe 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
)
Ist das, dass Django ein bisschen von den Daten entfernt:
"last_login": "2018-08-03T10:51:42.990", # DjangoJSONEncoder
"last_login": "2018-08-03T10:51:42.990239", # default
In einigen Fällen müssen Sie daher vorsichtig sein.