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

2024-09-30 16:39:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用ijson.kviitems来迭代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%

谢谢


Tags: 文件answernameidjsondatafilenamethis
1条回答
网友
1楼 · 发布于 2024-09-30 16:39:38

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

echo '{
  "filename": {
    "file_data": {
      "name":"samplefile",
      "filetype":"Miscellaneous",
      "id":123,
      "timestamp":"2020-10-08 00:20:00"
    }
  }
}' | python -m ijson.dump -m kvitems
#: key, value
      -
0: filename, {'file_data': {'name': 'samplefile', 'filetype': 'Miscellaneous', 'id': 123, 'timestamp': '2020-10-08 00:20:00'}}

这里keyfilename,而value是对象的其余部分,因为整个对象是filename下的值。特别是像namefiletype这样的键不会单独报告;如果希望报告这些(及其各自的值),则必须使用filename.file_data前缀

根据原始问题中的评论,我猜这是实际问题,但不能在这里添加更广泛的评论来进一步澄清问题,希望这也是您问题的实际答案

相关问题 更多 >