我可以得到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的字典也是有意义的。