Json to OrderedDict в Python
Всякий раз, когда я пытаюсь разобрать json на OrderedDict, он заканчивается в другом порядке, чем json. Я пробую это так:
from collections import OrderedDict
data = OrderedDict(json.loads(resp.read().decode("utf-8")), object_pairs_hook=OrderedDict)
Делаю ли я что-то неправильно, если да, то что я могу сделать, чтобы исправить это, или это невозможно в python?
Я видел такие вещи, как object_pairs_hook=collections.OrderedDict
, но это даже не выполняется правильно. Он не может решить проблему с ответом.
1 ответ:
У вас есть аргумент ключевого слова в неправильном месте, который может быть более ясным, если мы добавим больше пробелов:
data = OrderedDict( json.loads( resp.read().decode("utf-8") # one argument to json.loads ), object_pairs_hook=OrderedDict # second argument to OrderedDict )
OrderedDict
не принимает такого аргумента - вы хотели передать его вjson.loads
, тогда вам не нужно его воссоздавать:data = json.loads( resp.read().decode("utf-8"), object_pairs_hook=OrderedDict )
Причина, по которой вы не видите желаемого порядка, когда вы пропускаете
object_pairs_hook
, заключается в том, чтоjson.loads
создает ванильный, неупорядоченный словарь, а затем преобразует его вOrderedDict
.