我可以得到JSON加载到Python中的OrderedDict?
好的,我可以在json.dump
使用OrderedDict。 也就是说,OrderedDict可以用作JSON的input。
但是它可以用作输出吗? 如果这样怎么样? 在我的情况下,我想load
到一个OrderedDict,所以我可以保持在文件中的键的顺序。
如果没有,是否有某种解决方法?
是的你可以。 通过为JSONDecoder指定object_pairs_hook
参数。 实际上,这是文档中给出的确切示例。
>>> json.JSONDecoder(object_pairs_hook=collections.OrderedDict).decode('{"foo":1, "bar": 2}') OrderedDict([('foo', 1), ('bar', 2)]) >>>
你可以传递这个参数给json.loads
(如果你不需要一个解码器实例用于其他目的),像这样:
>>> 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 } >>>
使用json.load
以同样的方式完成:
>>> data = json.load(open('config.json'), object_pairs_hook=OrderedDict)
Python 2.7+的简单版本
my_ordered_dict = json.loads(json_str, object_pairs_hook=collections.OrderedDict)
或者对于Python 2.4到2.6
import simplejson as json import ordereddict my_ordered_dict = json.loads(json_str, object_pairs_hook=ordereddict.OrderedDict)
除了倾销字典之外,你总是可以写出键列表,然后通过遍历列表来重构OrderedDict
。
除了在字典旁边倾倒有序的键列表之外,另一个具有明确优势的低技术解决scheme是转储(有序的)键值对列表ordered_dict.items()
; 加载是一个简单的OrderedDict(<list of key-value pairs>)
。
利用json以正确的顺序转储OrderedDict的事实确实不错。 但是,通常不需要将每个 JSON字典作为OrderedDict(通过object_pairs_hook
参数)读取,因此仅显式转换必须sorting的字典也是有意义的。