我可以将 JSON 加载到 OrderedDict 中吗? [英] Can I get JSON to load into an OrderedDict?
问题描述
好的,所以我可以在 json.dump
中使用 OrderedDict.也就是说,OrderedDict 可以用作 JSON 的输入.
但是它可以用作输出吗?如果是这样怎么办?就我而言,我想将 load
加载到 OrderedDict 中,这样我就可以保持文件中键的顺序.
如果没有,有什么解决方法吗?
是的,你可以.通过将 object_pairs_hook
参数指定给 JSONDecoder.事实上,这是文档中给出的确切示例.
您可以将此参数传递给 json.loads
(如果您不需要 Decoder 实例用于其他目的),如下所示:
使用 json.load
的方式相同:
Ok so I can use an OrderedDict in json.dump
. That is, an OrderedDict can be used as an input to JSON.
But can it be used as an output? If so how? In my case I'd like to load
into an OrderedDict so I can keep the order of the keys in the file.
If not, is there some kind of workaround?
Yes, you can. By specifying the object_pairs_hook
argument to JSONDecoder. In fact, this is the exact example given in the documentation.
>>> json.JSONDecoder(object_pairs_hook=collections.OrderedDict).decode('{"foo":1, "bar": 2}')
OrderedDict([('foo', 1), ('bar', 2)])
>>>
You can pass this parameter to json.loads
(if you don't need a Decoder instance for other purposes) like so:
>>> import json
>>> from collections import OrderedDict
>>> data = json.loads('{"foo":1, "bar": 2}', object_pairs_hook=OrderedDict)
>>> print json.dumps(data, indent=4)
{
"foo": 1,
"bar": 2
}
>>>
Using json.load
is done in the same way:
>>> data = json.load(open('config.json'), object_pairs_hook=OrderedDict)
这篇关于我可以将 JSON 加载到 OrderedDict 中吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!