gpt4 book ai didi

python - 流式 json 解析器

转载 作者:太空狗 更新时间:2023-10-29 21:57:43 28 4
gpt4 key购买 nike

<分区>

我希望为一个非常非常大的 JSON 文件(~ 1TB)实现一个流式 json 解析器,但我无法将其加载到内存中。一种选择是使用类似 https://github.com/stedolan/jq 的东西将文件转换为 json-newline-delimited,但是我需要对每个 json 对象执行各种其他操作,这使得这种方法并不理想。

给定一个非常大的 json 对象,我将如何逐个对象地解析它,类似于 xml 中的这种方法:https://www.ibm.com/developerworks/library/x-hiperfparse/index.html .

例如,在伪代码中:

with open('file.json','r') as f:
json_str = ''
for line in f: # what if there are no newline in the json obj?
json_str += line
if is_valid(json_str):
obj = json.loads(json_str)
do_something()
json_str = ''

此外,我没有发现 jq -c 特别快(忽略内存考虑)。例如,执行 json.loads 与使用 jq -c 一样快(而且快一点)。我也尝试使用 ujson,但一直收到我认为与文件大小有关的损坏错误。

# file size is 2.2GB
>>> import json,time
>>> t0=time.time();_=json.loads(open('20190201_itunes.txt').read());print (time.time()-t0)
65.6147990227

$ time cat 20190206_itunes.txt|jq -c '.[]' > new.json
real 1m35.538s
user 1m25.109s
sys 0m15.205s

最后,这是一个可用于测试的 100KB json 输入示例:https://hastebin.com/ecahufonet.json

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com