技術(shù)頻道導(dǎo)航
HTML/CSS
.NET技術(shù)
IIS技術(shù)
PHP技術(shù)
Js/JQuery
Photoshop
Fireworks
服務(wù)器技術(shù)
操作系統(tǒng)
網(wǎng)站運營

贊助商

分類目錄

贊助商

最新文章

搜索

【解決】json.decoder.JSONDecodeError: Extra data error

作者:admin    時間:2022-1-12 13:36:59    瀏覽:

當(dāng)你嘗試在 Python 中加載和解析包含多個 JSON 對象的 JSON 文件時,你如果收到一個錯誤:json.decoder.JSONDecodeError: Extra data error. 原因是 json.load()方法只能處理單個 JSON 對象。

 【解決】json.decoder.JSONDecodeError: Extra data error

如果文件包含多個 JSON 對象,則該文件無效。當(dāng)你嘗試加載和解析具有多個 JSON 對象的 JSON 文件時,每一行都包含有效的 JSON,但作為一個整體,它不是有效的 JSON,因為沒有頂級列表或?qū)ο蠖x。只有當(dāng)存在頂級列表或?qū)ο蠖x時,我們才能稱 JSON 為有效 JSON。

例如,你想讀取以下 JSON 文件,過濾一些數(shù)據(jù),并將其存儲到新的 JSON 文件中。

{"id": 1, "name": "json", "class": 8, "email": "json@webkaka.com"}
{"id": 2, "name": "john", "class": 8, "email": "jhon@webkaka.com"}
{"id": 3, "name": "josh", "class": 8, "email": "josh@webkaka.com"}
{"id": 4, "name": "emma", "class": 8, "email": "emma@webkaka.com"}

如果你的文件包含 JSON 對象列表,并且你想一次解碼一個對象,我們可以做到。要加載和解析具有多個 JSON 對象的 JSON 文件,我們需要執(zhí)行以下步驟:

  • 創(chuàng)建一個名為 jsonList 的空列表。
  • 逐行讀取文件,因為每一行都包含有效的 JSON。即,一次讀取一個 JSON 對象。
  • 使用 json.loads() 轉(zhuǎn)換每個 JSON 對象為Python的dict
  • 將此字典保存到名為 jsonList 的列表中。

現(xiàn)在讓我們看看這個例子。

import json

studentsList = []
print("Started Reading JSON file which contains multiple JSON document")
with open('students.txt') as f:
    for jsonObj in f:
        studentDict = json.loads(jsonObj)
        studentsList.append(studentDict)

print("Printing each JSON Decoded Object")
for student in studentsList:
    print(student["id"], student["name"], student["class"], student["email"])

輸出:

Started Reading JSON file which contains multiple JSON document
Printing each JSON Decoded Object
1 json 8 json@webkaka.com
2 john 8 jhon@webkaka.com
3 josh 8 josh@webkaka.com
4 emma 8 emma@webkaka.com

由空格而不是行分隔的 json

如果我們有多個由空格而不是行分隔的 json,將如何實現(xiàn)這一點?代碼如下:

import json

studentsList = []
print("Started Reading JSON file which contains multiple JSON document")
with open('students.txt') as f:
    braceCount = 0
    jsonStr = ''
    for jsonObj in f:
        braceCount += jsonObj.count('{')
        braceCount -= jsonObj.count('}')
        jsonStr += jsonObj
        if (braceCount == 0):
            studentDict = json.loads(jsonStr)
            studentsList.append(studentDict)
            jsonStr = ''

print("Printing each JSON Decoded Object")
for student in studentsList:
    print(student["id"], student["name"], student["class"], student["email"])

您可能對以下文章也感興趣

標(biāo)簽: Python  
x
  • 站長推薦
/* 左側(cè)顯示文章內(nèi)容目錄 */