我正在尝试将
islice
应用于包含大约 180k 文档的巨大 JSON 文件。
例如,该文件是:
[
{"propertyA": "abc"},
{"propertyB": "bcd"},
...
]
到目前为止,我正在执行
islice(ijson.items(file, prefix=''), 10000)
并获得 OOM,当检查 ijson.items(file, prefix='')
为执行 ijson.items(file, prefix='').__next__()
的第一个元素返回什么时,结果如下:
[ {doc1}, {doc2}, {doc3}, ... ]
我正在读取的 json 文件的结构不是列表列表,只有一个包含文档的列表,为什么我会得到一个列表列表,其中第一项是文件的全部内容?当我要求
{doc1}
时,我不应该只得到 __next__()
吗?我是否错误地使用了 ijson
来将文件包裹在另一个列表中?
解析数组中的项目时,数组的前缀应该是单词“item”。
换句话说,您应该这样调用它:
ijson.items(file, prefix='item')
,而不是尝试解析顶级对象的空前缀,然后,此可迭代对象的每一项将是顶级数组中的一个元素文件。
它位于项目的自述文件中,但措辞有点难以理解,因为我们往往不相信“字面的
item
部分”真的意味着使用 item
名称 - 所以,我'我们甚至在本地尝试过,以断言确实如此。 https://github.com/ICRAR/ijson?tab=readme-ov-file#prefix