-1

我正在使用 ijson.kvitems 遍历我拥有的 JSON 文件中的所有键。

JSON 文件如下所示:

{"filename":{"file_data":
{"name":"samplefile",
"filetype":"Miscellaneous",
"id":123,
"timestamp":"2020-10-08 00:20:00"}}}

基于这个答案,我的代码的简化版本看起来像这样(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%。

谢谢!!

4

1 回答 1

0

也许的文档kvitems并不完全清楚:它返回给定前缀的键/值对,并且它不是递归的。使用您的示例文档和代码,这就是kvitems返回的结果(请注意,在撰写本文ijson.dump时,最新的 PyPI ijson 版本尚未发布,但可master在 GitHub 上的最新版本中获得):

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前缀。

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

于 2021-06-10T03:07:20.257 回答