Sto usando python per codificare un OrderedDict con timestamp e ho problemi. I dati che sto cercando di codificare assomiglia a questo:python - using json con OrderedDict e Datetime
OrderedDict([('a', datetime.datetime(2015, 6, 15, 15, 58, 54, 884000)), ('b', 'b'), ('c', 'c'), ('d', 'd')])
mi aspetto che questo sia JSON codificato e decodificato per ottenere esattamente gli stessi dati.
Per codificare il timestamp direttamente, senza passare all'ora ISO o Unix, ho utilizzato l'interfaccia json_util di bson come di seguito. Funziona correttamente.
json.dumps(str, default=json_util.default)
json.loads(jsonstr, object_hook=json_util.object_hook)
Al fine di ottenere un OrderedDict ho usato object_pairs_hook, che funziona anche:
json.loads(x, object_pairs_hook=OrderedDict)
Tuttavia, se usati insieme, il pasticcio di due cose tra loro e il risultato non è nel formato corretto (Poiché l'interfaccia di bson sta creando un dizionario extra per il timestamp).
json.loads(jsonstr, object_hook=json_util.object_hook, object_pairs_hook=OrderedDict)
Questa query finisce per ottenere questo:
OrderedDict([(u'a', OrderedDict([(u'$date', 1434383934884L)])), (u'b', u'b'), (u'c', u'c'), (u'd', u'd')])
Il timestamp non viene analizzato correttamente. Qualche suggerimento su come farlo correttamente? (Pickle potrebbe essere una direzione, ma cerco prima altre soluzioni).
Cosa significa '' uscita json_util.object_hook'' per '' datetime'' oggetti? –
@JamesMills output '{"a": {"$ date": 1434383934884}, "b": "b", "c": "c", "d": "d"}'. Questo dizionario extra viene analizzato come OrderDict da object_pairs_hook interrompendo quindi object_hook per decodificarlo. –
Quindi è codificato come UNIX Timestamp come '' {"$ date": ""} ''? –