我一直在尝试用 Python 解析 JSON 文件ijson
图书馆。这在查看二级元素或使用解析器时有效,但我更喜欢直接查看顶级元素的便利性。
JSON 的格式基本上如下:
{"foo":{"a":1,"b":2},"bar":{"c":3,"d":4}}
所以,没什么特别的。我想做的就是以一种产生的方式迭代它"foo"
及其值/"bar"
及其每次迭代的值。 (所以就像如果我要json.loads
这个东西。)我的代码如下 - 我知道它不会同时产生两者,我只是在测试:
f=open('test')
i=ijson.items(f,'item')
for j in i:
print j
的语法items()
功能是什么我从 stackoverflow 得到 https://stackoverflow.com/questions/19996401/how-to-parse-json-with-ijson-and-python.
然而,奇怪的是,循环确实需要时间,但实际上并没有输出任何内容。 (即使我放了一个print 'qyx'
在那里,所以我不知道它在做什么。)如果我修改items()
解析函数foo.item
,它确实有效,但我能找到的很少的信息表明它也应该适用于顶层。另外,如果我使用以下内容,它可以工作,但它更加不透明:
i=ijson.parse(f)
for prefix, event, value in i:
if not prefix or event == 'map_key' or ( '.' in prefix and event in ('start_map','end_map') ):
continue
print prefix, event, value
这将输出
foo start_map None
foo.a number 1
foo.b number 2
foo end_map None
bar start_map None
bar.c number 3
bar.d number 4
bar end_map None
...可以加工以产生"foo"
and {"a":1,"b":2}
等等,但这比较麻烦。