解析json文件时发生错误

时间:2016-05-10 18:56:19

标签: python json

我正在尝试将json格式数据解析为json.load()方法。但它给了我一个错误。我尝试了不同的方法,如逐行阅读,转换为字典,列表等,但它不起作用。我也在下面的网址loading-and-parsing-a-json中尝试了解决方案,但它给了我同样的错误。

import json
data = []
with open('output.txt','r') as f:
    for line in f:
         data.append(json.loads(line))

错误:

ValueError: Extra data: line 1 column 71221 - line 1 column 6783824 (char 71220 - 6783823)

请在以下网址中找到output.txt

Content- output.txt

2 个答案:

答案 0 :(得分:1)

您所谓的JSON文件不是格式正确的JSON文件。 JSON文件必须只包含一个对象(列表,映射,数字,字符串等)。您的文件似乎按顺序包含许多JSON对象,但列表的格式不正确。

当您使用此非JSON数据时,您的程序的JSON解析器正确返回错误条件。

这是一个将解释您的文件的程序:

import json

# Idea and some code stolen from https://gist.github.com/sampsyo/920215

data = []
with open('output.txt') as f:
    s = f.read()
decoder = json.JSONDecoder()

while s.strip():
    datum, index = decoder.raw_decode(s)
    data.append(datum)
    s = s[index:]

print len(data)

答案 1 :(得分:1)

我编写了以下内容,它会将您的文件分成每行一个JSON字符串,然后返回并执行您最初的操作。这里肯定有优化的空间,但至少它现在可以按预期工作。

import json
import re

PATTERN = '{"statuses"'
file_as_str = ''

with open('output.txt', 'r+') as f:
    file_as_str = f.read()
    m = re.finditer(PATTERN, file_as_str)
    f.seek(0)
    for pos in m:
        if pos.start() == 0:
            pass
        else:
            f.seek(pos.start())
            f.write('\n{"')

data = []

with open('output.txt','r') as f:
    for line in f:
        data.append(json.loads(line))