【解决】json.decoder.JSONDecodeError: Extra data error
作者:admin 时间:2022-1-12 13:36:59 浏览:当你尝试在 Python 中加载和解析包含多个 JSON 对象的 JSON 文件时,你如果收到一个错误:json.decoder.JSONDecodeError: Extra data error. 原因是 json.load()
方法只能处理单个 JSON 对象。
如果文件包含多个 JSON 对象,则该文件无效。当你尝试加载和解析具有多个 JSON 对象的 JSON 文件时,每一行都包含有效的 JSON,但作为一个整体,它不是有效的 JSON,因为没有顶级列表或对象定义。只有当存在顶级列表或对象定义时,我们才能称 JSON 为有效 JSON。
例如,你想读取以下 JSON 文件,过滤一些数据,并将其存储到新的 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 文件,我们需要执行以下步骤:
- 创建一个名为 jsonList 的空列表。
- 逐行读取文件,因为每一行都包含有效的 JSON。即,一次读取一个 JSON 对象。
- 使用
json.loads()
转换每个 JSON 对象为Python的dict
。 - 将此字典保存到名为 jsonList 的列表中。
现在让我们看看这个例子。
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,将如何实现这一点?代码如下:
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"])
您可能对以下文章也感兴趣
- Python将JSON数据写入文件时怎样处理非ASCII字符
- 【解决】Python将JSON写入文件:Object of type Your Class is not JSON serializable
- json.dump()将Python字典对象转换为JSON格式写入文件
- json.dumps()将Python字典对象转换为JSON格式的字符串
- Python使用DjangoJSONEncoder或json_util把日期时间序列化为JSON
- Python编写自定义方法将日期时间转为JSON
- 两种方法Python将日期时间DateTime序列化为JSON
- Python如何直接访问JSON嵌套键
- 两种方案 Python 解决unicode、utf-8编码问题
- Python将Unicode或非ASCII数据序列化为JSON原样字符串
标签: Python
- 站长推荐