首页 > 解决方案 > 如何在 python 中读取 JSON 文件作为具有特定格式的块的流

问题描述

我在 JSON 中有一个约 8 GB 的巨大文件,我想将它作为流读取,一次包含 1000 个示例块。所以我搜索了很多并尝试了几个包,但没有一个真的能完成这项工作。

我的文件格式如下:

{
    "Elem1": [
       {
            "orgs": [],
       },
       {
           "people":[]
       },
    ],
   "Elem2"":[
       {
            "orgs": [],
       },
       {
           "people":[]
       },
    ],
...
}

如您所见,每个element都保存为一个元组,其中包含两个字典和重复出现的键。有没有办法我可以读取/加载/处理上面的元素块中的文件,即 chunk_1 = [ Elem1, Elem2, ... ]进入RAM并从中获取键的值?任何想法如何做到这一点?感谢您的帮助。

最好的问候克里斯

标签: pythonjson

解决方案


正如 Serge 所说,您将需要一个自定义解析器来完成这项工作。如下所示:

stack = []

json_string = ""
count = 0
with open(filename) as f:
  while True:
    c = f.read(1)
    if c == '{' or c == '[':
      stack.append(c)
    elif c == '}' or c == ']':
      stack.pop()
    json_string += c
    if len(stack) == 1:
      json_string += '}'
      count += 1
    if count == DESIRED_COUNT :
      break

最终json_string将包含带有 DESIRED_COUNT 个对象的 json


推荐阅读