/ / Wie deserialisiert man die datetime in einem json-Objekt in Python? - Python, Json, Datum und Uhrzeit

Wie man die Datetime in einem Json-Objekt in Python deserialisiert? - Python, Json, Datetime

Mein ursprüngliches Wörterbuch ist

A = {
"date": datetime.date(2013, 1, 1),
"price": 100
}

Schon seit datetime.date ist nicht serialisierbar, ich füge eine Standardfunktion hinzu, um damit umzugehen:

B = json.dumps(A, default=lambda obj:obj.isoformat() if hasattr(obj, "isoformat") else obj)

Meine Frage ist, wie ich das deserialisieren kann "date" Feld, während ich benutze json.loads kann ich es wieder in das ursprüngliche Wörterbuch konvertieren?

Antworten:

8 für die Antwort № 1
from datetime import datetime

def load_with_datetime(pairs, format="%Y-%m-%d"):
"""Load with dates"""
d = {}
for k, v in pairs:
if isinstance(v, basestring):
try:
d[k] = datetime.strptime(v, format).date()
except ValueError:
d[k] = v
else:
d[k] = v
return d

dump = json.dumps(A, default = f)
json.loads(dump, object_pairs_hook=load_with_datetime)

# {u"date": datetime.date(2013, 1, 1), u"price": 100}

2 für die Antwort № 2

Fahren Sie mit Ihrem Beispielcode fort.

C = json.loads(B)
C["date"] = datetime.datetime.strptime(C["date"], "%Y-%m-%d")
print C
# {u"date": datetime.datetime(2013, 1, 1, 0, 0), u"price": 100}

1 für die Antwort № 3

Pickle-Modul verwenden

    import pickle
fileop = open("timeformat.txt","wb")
pickle.dump(A,fileop)
fileop.close()
print pickle.load(open("timeformat.txt","rb"))
print A["Date"]


>>>{"date": datetime.date(2013, 1, 1), "price": 100}
>>>2013-01-01