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 2

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.