首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用ijson从json文件中提取值

使用ijson从json文件中提取值
EN

Stack Overflow用户
提问于 2016-08-18 19:20:42
回答 1查看 1.4K关注 0票数 1

我有一个很大的JSON文件,如下所示:

代码语言:javascript
复制
{"details":{

    "1000":[
        ["10","Thursday","1","19.89"],

        ["12","Monday","3","20.90"],
        ...
    ]
    "1001":[
        ["30","Sunday","11","80.22"],

        ["88","Wednesday","22","8.29"],
        ...
    ]

    }
}

现在,我使用以下代码从"details“值中提取"1000”、"1001“等变量中的列表,使用ijson (Interactive ):

代码语言:javascript
复制
import ijson as ijson
filename='Clean_Details.json'

with open(filename,'r') as f:
    objects=ijson.items(f,'details.1001.item')
    for row in objects:
        print(row)
    print("Done")

但是问题是:循环的并没有在上面的代码中终止。打印完1001中的最终列表后,它继续运行。

我猜上面的代码中的Generator(objects)没有遇到StopIteration,不知道为什么。

有人能帮忙吗?帮点忙就好了。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-08-19 10:33:58

好的,因为JSON文件的大小很大,它是>800 to的,有超过一百万条记录,所以解析需要时间来完成

循环最终结束,但需要一些时间才能完成。在一个正常规格的个人电脑上,这肯定需要一些时间。

还使用:

代码语言:javascript
复制
import ijson as ijson

在非常大的文件上速度要慢得多,因为大多数解析都是使用python后端代码进行的,因此为了提高速度,

用起来更好

代码语言:javascript
复制
import ijson.backends.yajl2_cffi as ijson

因为它在C语言中有一个后端,使用cffi,这确实改善了上面代码的运行时间。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39025988

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档