Ich benutze Python, um ein OrderedDict mit Zeitstempel darin zu kodieren, und ich habe Probleme. Die Daten, die ich zu kodieren versuche sieht wie folgt aus:Python - Verwenden von Json mit OrderedDict und Datetime
OrderedDict([('a', datetime.datetime(2015, 6, 15, 15, 58, 54, 884000)), ('b', 'b'), ('c', 'c'), ('d', 'd')])
ich dies erwarten json und genau die gleichen Daten erhalten decodiert codiert werden.
Um Timestamp direkt zu codieren, ohne auf ISO oder Unix-Zeit zu ändern, habe ich BSONs json_util-Schnittstelle wie folgt verwendet. Es funktioniert korrekt.
json.dumps(str, default=json_util.default)
json.loads(jsonstr, object_hook=json_util.object_hook)
Um eine OrderedDict zu bekommen habe ich object_pairs_hook, die auch funktioniert:
json.loads(x, object_pairs_hook=OrderedDict)
Wenn jedoch zusammen verwendet werden, die zwei Dinge Chaos miteinander, und das Ergebnis ist nicht im richtigen Format (Da die bson-Schnittstelle ein zusätzliches Wörterbuch für den Zeitstempel erstellt).
json.loads(jsonstr, object_hook=json_util.object_hook, object_pairs_hook=OrderedDict)
Diese Abfrage landet diese bekommen:
OrderedDict([(u'a', OrderedDict([(u'$date', 1434383934884L)])), (u'b', u'b'), (u'c', u'c'), (u'd', u'd')])
Der Zeitstempel nicht korrekt analysiert wird, aus. Irgendwelche Vorschläge, wie man das richtig macht? (Pickle kann eine Richtung sein, aber ich suche zuerst andere Lösungen).
Was '' tut json_util.object_hook'' Ausgang für '' datetime'' Objekte? –
@JamesMills Ausgabe '{"a": {"$ date": 1434383934884}, "b": "b", "c": "c", "d": "d"}. Dieses zusätzliche Wörterbuch wird als OrderDict von object_pairs_hook analysiert und stoppt damit object_hook, um es zu dekodieren. –
So ist es als UNIX-Timestamp als "{" $ date ":" ""} "'? –