簡體   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