我可以将 JSON 加载到 OrderedDict 中吗? [英] Can I get JSON to load into an OrderedDict?

查看:35
本文介绍了我可以将 JSON 加载到 OrderedDict 中吗?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

好的,所以我可以在 json.dump 中使用 OrderedDict.也就是说,OrderedDict 可以用作 JSON 的输入.

但是它可以用作输出吗?如果是这样怎么办?就我而言,我想将 load 加载到 OrderedDict 中,这样我就可以保持文件中键的顺序.

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

解决方案

是的,你可以.通过将 object_pairs_hook 参数指定给 JSONDecoder.事实上,这是文档中给出的确切示例.

<预><代码>>>>json.JSONDecoder(object_pairs_hook=collections.OrderedDict).decode('{"foo":1, "bar": 2}')OrderedDict([('foo', 1), ('bar', 2)])>>>

您可以将此参数传递给 json.loads(如果您不需要 Decoder 实例用于其他目的),如下所示:

<预><代码>>>>导入json>>>从集合导入 OrderedDict>>>数据 = json.loads('{"foo":1, "bar": 2}', object_pairs_hook=OrderedDict)>>>打印 json.dumps(data, indent=4){富":1,酒吧":2}>>>

使用 json.load 的方式相同:

<预><代码>>>>数据 = json.load(open('config.json'), object_pairs_hook=OrderedDict)

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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆