【发布时间】:2021-08-21 05:58:18
【问题描述】:
我正在使用 ijson.kvitems 遍历我拥有的 JSON 文件中的所有键。
JSON 文件如下所示:
{"filename":{"file_data":
{"name":"samplefile",
"filetype":"Miscellaneous",
"id":123,
"timestamp":"2020-10-08 00:20:00"}}}
基于this answer,我的代码的简化版本如下所示(v 也是字典):
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']
我只能以这种方式从原始文件中流式传输/读取大约 94% 的密钥,试图找出是否有办法获得剩余的 6%。
谢谢!!
【问题讨论】:
-
请发帖minimal reproducible example,包括。导入和示例输入 JSON。询问有关场外资源的建议在 SO 上是题外话。
-
我想帮忙,但从问题中不清楚确切的问题是什么。在您的示例中,哪些键无法读取?该示例本身似乎也是错误的,因为
kvitems中的空路径应为k生成filename,而该键下的对象为v -
AFAIK,空路径应该允许访问字典中的所有键(文件名),并且 v 应该包含嵌套字典 ({"file_data": {"name":...} }),这就是我使用 kvitems 的方式。我的问题是,在 ijson.kvitems(f, '') 中迭代 k, v 时,并非所有的 Ks(即文件名)都包含在迭代器中。
-
对不起,但确切的问题仍然不清楚(至少对我来说)。您能否修改示例 JSON 文档和测试代码以准确显示缺少哪些键?另请注意,您在示例代码中索引到
v的方式不适用于给定的 JSON 文档,因为访问应该类似于v['file_data']['name']等 -
我无法确定缺少哪些键,因为它们有几十万个,并且迭代需要很长时间(数据在远程仓库中,长篇大论)。关于访问 - 我理解它的方式,作为“文件名”键的值 - v is 'file_data' - 你无法访问 v['file_data']。我错过了什么?再次感谢...
标签: python jsonparser ijson