繁体   English   中英

在 Python 中从具有多个对象的 JSON 文件中读取

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM