将 islice 应用于 ijson,应用时获取列表的列表?

问题描述 投票:0回答:1

我正在尝试将

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
来将文件包裹在另一个列表中?

python
1个回答
0
投票

解析数组中的项目时,数组的前缀应该是单词“item”。

换句话说,您应该这样调用它:

ijson.items(file, prefix='item')
,而不是尝试解析顶级对象的空前缀,然后,此可迭代对象的每一项将是顶级数组中的一个元素文件。

它位于项目的自述文件中,但措辞有点难以理解,因为我们往往不相信“字面的

item
部分”真的意味着使用
item
名称 - 所以,我'我们甚至在本地尝试过,以断言确实如此。 https://github.com/ICRAR/ijson?tab=readme-ov-file#prefix

© www.soinside.com 2019 - 2024. All rights reserved.