使用yajl或ijson提取json

2024-05-15 06:30:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我是JSON新手,我正在尝试研究一个无法加载到内存中的巨大(16GB)JSON文件。我可以使用python中的ijson或{}之类的东西轻松地获得JSON数组的第一个条目吗?在

目前看来效果最好的是:

parsed = ijson.parse(open("file.json"))
for f in parsed:
    print f

问题是,输出是一大堆混乱的行,我无法轻松地将它们放回JSON条目中。我仍然不知道如何从这里得到一个实际的JSON条目。有什么想法吗?在


Tags: 文件内存injsonforparse条目数组
1条回答
网友
1楼 · 发布于 2024-05-15 06:30:56

如果知道JSON的结构,就可以在解析时动态地构建它。我在解析大约3gb的json时遇到了这个问题。虽然不漂亮,但很管用。在

因此,每个对象都有一个url、一个主体、一个doc_id和一个标题。对于每个解析的项(前缀),我确定它是什么类型的,并注意到我们有一个bool。当找到所有对象后,我将其添加到一个数组中,该数组最终将包含JSON中的所有对象。在

result = []
u = False
b = False
i = False
t = False
for prefix, event, value in ijson.parse(open("./docs.txt", "rb")):
    if(prefix == 'item.url'):
        url = value
        u = True
    elif(prefix == 'item.body'):
        body = value
        b = True
    elif(prefix =='item.doc_id'):
        doc_id = value
        i = True
    elif(prefix == 'item.title'):
        title = value
        t = True
    if u and b and i and t:
        numofDocs = numofDocs +1
        u = False
        b = False
        i = False
        t = False
        result.append({'doc_id': doc_id, 'url': url, 'title' : title, 'body' : body})

相关问题 更多 >

    热门问题