Używam Pythona do kodować OrderedDict ze znacznikiem czasu w nim i mam problemy. Dane, które próbuję zakodować wygląda następująco:python - za pomocą JSON z OrderedDict i Datetime
OrderedDict([('a', datetime.datetime(2015, 6, 15, 15, 58, 54, 884000)), ('b', 'b'), ('c', 'c'), ('d', 'd')])
Spodziewam to być json kodowane i dekodowane, aby uzyskać dokładnie te same dane.
W celu zakodowania timestamp bezpośrednio, bez zmiany ISO lub Unix raz użyłem interfejsu json_util bson jako poniżej. Działa poprawnie.
json.dumps(str, default=json_util.default)
json.loads(jsonstr, object_hook=json_util.object_hook)
W celu uzyskania OrderedDict użyłem object_pairs_hook, który działa również:
json.loads(x, object_pairs_hook=OrderedDict)
Jednak, gdy stosowane razem, bałagan dwie rzeczy ze sobą, a wynik nie jest w prawidłowym formacie (Ponieważ interfejs bson tworzy dodatkowy słownik dla znacznika czasu).
json.loads(jsonstr, object_hook=json_util.object_hook, object_pairs_hook=OrderedDict)
To zapytanie kończy się coraz to:
OrderedDict([(u'a', OrderedDict([(u'$date', 1434383934884L)])), (u'b', u'b'), (u'c', u'c'), (u'd', u'd')])
Znacznik czasu nie jest analizowany poprawnie. Wszelkie sugestie, jak to zrobić poprawnie? (Pickle może być kierunkiem, ale najpierw szukam innych rozwiązań).
co robi '' json_util.object_hook'' wyjście '' datetime'' obiektów? –
@JamesMills to wyjście '{"a": {"$ date": 1434383934884}, "b": "b", "c": "c", "d": "d"} ". Ten dodatkowy słownik jest parsowany jako OrderDict przez object_pairs_hook tym samym zatrzymując object_hook, aby go zdekodować. –
Jest zakodowany jako znacznik UNIX jako '' {"$ date": ""} ''? –