我正在尝试将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
答案 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))