尝试使用ijson流式处理我的(非常大的)json文件 - 格式错误吗?

0 投票
1 回答
38 浏览
提问于 2025-04-14 16:55

我正在尝试用Python中的ijson来处理一个很大的json文件。这是我第一次尝试这样做。

我现在的代码非常简单:

with open('file.json', 'rb') as f:
j = ijson.items(f, 'item')

for item in j:
    print('x')

但是运行后出现了“尾部垃圾”错误——基本上文件中的第二个项目被认为是垃圾,我觉得是因为文件格式的问题。

我的json文件是来自kaggle的这个链接,格式是这样的:

{"_id":{"$oid":"6457879fd1187d621cbbba9c"},"sourceCC":"us",...etc...}
{"_id":{"$oid":"6457879fd1187d621cbddd8a"},"sourceCC":"us",...etc...}

这个文件大约有3GB,所以我无法直接打开它。

如果我使用'multiple_items=True',我觉得它会把所有项目都当作同一个项目的多个值来处理,这样就不会报错,但也不会返回其他任何东西。

我该怎么办呢?

谢谢。

1 个回答

1

这其实不是一个完整的JSON文档。它是一系列用换行符连接在一起的JSON文档。你不需要使用ijson来读取它;你可以逐行读取,然后使用内置的json模块来处理。

import json

with open('myfile.json') as fd:
  for line in fd:
    obj = json.loads(line)
    # do something with obj here

撰写回答