一尘不染

将字符串转换为有序字典?

python

我有一个字符串,该字符串基本上包含一堆JSON格式的文本,最终我希望将其以“漂亮打印”格式导出到Excel,并带有适当的缩进嵌套等。

出于可读性考虑,必须保留键/值的原始顺序。我想实现自己想要的目标的过程是

a)使用类似eval的方法将字符串转换为字典,b)使用collections库中的OrderedDict保持顺序完整。

但是我没有得到预期的结果:

In [21]: json_string = str({"id":"0","last_modified":"undefined"})
In [22]: OrderedDict(eval(json_string))
Out[23]: OrderedDict([('last_modified', 'undefined'), ('id', '0')])

我也还没有弄清楚如何将输出以漂亮的打印格式写成excel,但是我希望那会是相对容易的部分!


阅读 272

收藏
2021-01-20

共1个答案

一尘不染

您可以使用JSONDecoderobject_pairs_hook参数将已解码的字典更改为OrderedDict:

import collections
import json

decoder = json.JSONDecoder(object_pairs_hook=collections.OrderedDict)

json_string = '{"id":"0","last_modified":"undefined"}'
print decoder.decode(json_string)
json_string = '{"last_modified":"undefined","id":"0"}'
print decoder.decode(json_string)

打印:

OrderedDict([(u'id', u'0'), (u'last_modified', u'undefined')])
OrderedDict([(u'last_modified', u'undefined'), (u'id', u'0')])
2021-01-20