Python 如何使用IJSON kviitems访问JSON文件中的所有键?

Python 如何使用IJSON kviitems访问JSON文件中的所有键?,python,jsonparser,ijson,Python,Jsonparser,Ijson,我使用ijson.kviitems来迭代JSON文件中的所有键 JSON文件如下所示: {"filename":{"file_data": {"name":"samplefile", "filetype":"Miscellaneous", "id":123, "timestamp":"2020-10-08 00:20:00&qu

我使用ijson.kviitems来迭代JSON文件中的所有键

JSON文件如下所示:

{"filename":{"file_data":
{"name":"samplefile",
"filetype":"Miscellaneous",
"id":123,
"timestamp":"2020-10-08 00:20:00"}}}
基于,我的代码的简化版本看起来是这样的(v也是一个字典):

我只能以这种方式从原始文件中流式传输/读取大约94%的密钥,试图找出是否有办法达到剩余的6%


谢谢

kviitems的文档可能不太清楚:它返回给定前缀处的键/值对,并且不是递归的。对于您的示例文档和代码,这是
kviitems
返回的内容(请注意,在编写
ijson.dump时,
尚未出现在最新的PyPI ijson版本上,但在GitHub上的最新
master
版本上可用):

echo'{
“文件名”:{
“文件数据”:{
“名称”:“样本文件”,
“文件类型”:“杂项”,
“id”:123,
“时间戳”:“2020-10-08 00:20:00”
}
}
}“| python-m ijson.dump-m kviitems
这里的
文件名
,而
是对象的其余部分,因为整个对象是
文件名
下的值。特别是
name
filetype
等键不会单独报告;如果您希望报告这些(及其各自的值),则必须使用
filename.file\u data
前缀


根据原始问题中的评论,我猜这是实际问题,但无法在此添加更广泛的评论以进一步澄清问题,希望这也是您问题的实际答案。

请发布,包括导入和示例输入JSON。询问关于非现场资源的建议是离题的。编辑,谢谢。我很想帮忙,但从问题来看,不清楚确切的问题是什么。在您的示例中,哪些键无法读取?该示例本身似乎也是错误的,因为
kvitems
中的空路径应该为
k
生成
filename
,为
v
AFAIK生成该键下的对象,空路径应该允许访问字典中的所有键(文件名),并且v应该包含嵌套字典({“file_data”:{“name”:…}),这就是我使用kvitems的方式。我的问题是当在ijson.kviitems(f'')中迭代k,v时,并不是所有的k(即文件名)都包含在迭代器中。抱歉,但确切的问题仍然不清楚(至少对我来说)。您能否修改示例JSON文档和测试代码以准确显示缺少哪些键?还要注意,在示例代码中索引到
v
的方式不适用于给定的JSON文档,因为访问应该类似于
v['file\u data']['name']
,等等
import ijson

f = open('file.json')
for k, v in ijson.kvitems(f, ''):
    name = v['name']
    user_id = v['id']
    filetype = v['filetype']
    timestamp = v['timestamp']
#: key, value
-------------
0: filename, {'file_data': {'name': 'samplefile', 'filetype': 'Miscellaneous', 'id': 123, 'timestamp': '2020-10-08 00:20:00'}}