我可以让JSON加载到OrderedDict中吗?

  • 问题:
  • 好的,我可以在中使用OrderedDictjson.dump文件。也就是说,OrderedDict可以用作JSON的输入

    但它能被用作输出吗?如果是,怎么办?在我的例子中,我希望加载到OrderedDict中,这样我就可以保持文件中键的顺序

    如果没有,有什么解决办法吗?在

  • 答案:
  • 是的,你可以。通过将object\u pairs\u hook参数指定给JSONDecoder. 事实上,这就是文档中给出的确切示例

    >>> 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)