【发布时间】:2014-08-01 19:18:46
【问题描述】:
我一直在尝试使用 Python 的 ijson 库解析 JSON 文件。这在查看二级元素或使用解析器时有效,但我更喜欢直接查看顶级元素的便利。
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() 函数的语法是 I got from stackoverflow。
然而,奇怪的是,循环确实需要时间,但它实际上并没有输出任何东西。 (即使我在里面放了一个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" 和{"a":1,"b":2} 等,但这更麻烦。
【问题讨论】: