[英]Read from JSON file with multiple objects in Python
我对 Python 中的 JSON 库有疑问。 我想不出一种从 json 文件中读取数据的方法,如下所示:
{"name": "LOTR", "author": "Tolkin"}{"name": "Aska", "author": "Ivo"}
因为当我尝试使用此代码加载数据时:
with open("json_books.txt","r") as file:
json_data = json.load(file)
我收到以下错误:
json.decoder.JSONDecodeError: Extra data: line 1 column 37 (char 36)
我查了一下,我找到的解决方案都没有帮助我。 如果有人能帮助我解决这个问题,我将不胜感激。
您可以将文件内容作为字符串读取,从JSONDecodeError
异常的错误消息中提取作为索引的“char”编号,并将字符串的切片重新解析为有效的 JSON,并解析其余部分以相同的方式处理字符串,直到它不再引发错误:
import json
import re
s = '{"name": "LOTR", "author": "Tolkin"}{"name": "Aska", "author": "Ivo"}'
json_data = []
while True:
try:
json_data.append(json.loads(s))
break
except json.JSONDecodeError as e:
match = re.match(r'Extra data: .*\(char (\d+)\)', str(e))
if match:
index = int(match.group(1))
json_data.append(json.loads(s[:index]))
s = s[index:]
else:
raise
print(json_data)
这输出:
[{'name': 'LOTR', 'author': 'Tolkin'}, {'name': 'Aska', 'author': 'Ivo'}]
您列出的不是有效的 JSON。 JSON 必须在顶层有一个列表或对象——它有两个对象。
也许正确的 JSON 应该是:
[{"name": "LOTR", "author": "Tolkin"}, {"name": "Aska", "author": "Ivo"}]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.