在Python中解析大型JSON文件

时间:2015-10-29 13:59:23

标签: python json

我正在尝试用Python解析一个非常大的JSON文件。 该文件有6523440行,但分为很多JSON对象。

结构如下:

[
  {
    "projects": [
     ...
    ]
  }
]
[
  {
    "projects": [
     ...
    ]
  }
]
....
....
....

它继续......

每次我尝试使用json.load()加载它时都会出错

ValueError: Extra data: line 2247 column 1 - line 6523440 column 1 (char 101207 - 295464118)

在第一个对象结束并且第二个对象开始的行上。 有没有办法单独加载它们或类似的东西?

2 个答案:

答案 0 :(得分:2)

您可以尝试使用像ijson这样的流式json库:

  

有时在处理特别大的JSON有效负载时可能会   值得甚至不构造单个Python对象并做出反应   个别事件立即产生一些结果

答案 1 :(得分:0)

尝试使用json.JSONDecoder.raw_decode。它仍然要求您将整个文档放在内存中,但允许您从一个字符串中迭代解码许多对象。

import re
import json

document = """
[
    1,
    2,
    3
]
{
    "a": 1,
    "b": 2,
    "c": 3
}
"""

not_whitespace = re.compile(r"\S")

decoder = json.JSONDecoder()

items = []
index = 0
while True:
    match = not_whitespace.search(document, index)
    if not match:
        break

    item, index = decoder.raw_decode(document, match.start())
    items.append(item)

print(items)