/ / Przekazywanie datetime do json przy użyciu python - python-2.7, python-3.x

Przekazywanie datetime do json za pomocą Pythona - python-2.7, python-3.x

Jestem nowy w programowaniu w Pythonie mam obiekt słownika jak

data={
"joiningdate": datetime.datetime(2016, 10, 13, 0, 0),
"shift": datetime.time(8, 0)
}

chcę przekazać tę wartość do json co ja zrobiłem to

class MyEncoder1(json.JSONEncoder):
def default(self, obj):
if isinstance(obj,datetime.date):
obj= datetime.datetime.strptime(obj,"%Y-%m-%d ")
elif isinstance(obj, datetime.datetime):
obj= datetime.datetime.strptime(obj,"%Y-%m-%d %H:%M:%S.%f")
elif isinstance(obj, datetime.time):
obj = datetime.time.strftime(obj,"%H:%M:%S")
elif isinstance(obj, Decimal):
obj = float(obj)
else:
obj = super(MyEncoder1, self).default(obj)
return obj
json_array = dumps(data,cls=MyEncoder1)

czas drukowania to tylko 00:08:00 ale data nie jest drukowana czy ktoś może pomóc?

Odpowiedzi:

0 dla odpowiedzi № 1

Tu są dwa błędy.

Po pierwsze, koder powinien zwrócić obiekt możliwy do serializacji, więc należy zastąpić wszystkie wywołania do strptime z strftime. strptime konstrukcje datetime obiekty z ciągu znaków (więc Twój kod rzuca TypeError) i myślę, że chcesz czegoś przeciwnego.

Druga, datetime.datetime() są w rzeczywistości przypadkami datetime.date, więc gdy pole „data dołączenia” jest serializowane, wchodzi do pierwszego oddziału if i to jest to. Powinno działać, jeśli przełączysz if isinstance(obj,datetime.date) i elif isinstance(obj, datetime.datetime):

class MyEncoder1(json.JSONEncoder):
def default(self, obj):
if isinstance(obj, datetime.datetime):
obj= datetime.datetime.strftime(obj,"%Y-%m-%d %H:%M:%S.%f")
elif isinstance(obj,datetime.date):
obj= datetime.datetime.strftime(obj,"%Y-%m-%d ")
elif isinstance(obj, datetime.time):
obj = datetime.time.strftime(obj,"%H:%M:%S")
elif isinstance(obj, Decimal):
obj = float(obj)
else:
obj = super(MyEncoder1, self).default(obj)
return obj