Python 中 json.decoder.JSONDecodeError: Extra data
Python “json.decoder.JSONDecodeError: Extra data”发生在我们尝试解析多个对象而不将它们包装在数组中时。 要解决该错误,请将 JSON 对象包装在一个数组中或声明一个指向包含这些对象的数组值的新属性。
这是一个非常简单的示例,说明错误是如何发生的。
import json
# ⛔️ json.decoder.JSONDecodeError: Extra data: line 1 column 3 (char 2)
result = json.loads('{}{}')
我们正在尝试解析 2 个并排的对象,而这些对象不是数组中的元素。
这是读取文件时如何发生错误的示例。
import json
file_name = 'example.json'
with open(file_name, 'r', encoding='utf-8') as f:
# ⛔️ json.decoder.JSONDecodeError: Extra data: line 2 column 3 (char 42)
my_data = json.load(f)
print(my_data) # 👉️ {'name': 'Alice', 'age': 30}
下面是 example.json 文件的内容。
example.json
{"id": 1, "name": "Alice", "age": 30} {"id": 2, "name": "Bob", "age": 35} {"id": 3, "name": "Carl", "age": 40}
解决该问题的一种方法是将 JSON 对象包装在一个数组中,并使用逗号分隔元素。
example.json
[ {"id": 1, "name": "Alice", "age": 30}, {"id": 2, "name": "Bob", "age": 35}, {"id": 3, "name": "Carl", "age": 40} ]
请注意
,数组中最后一个元素后没有逗号。
现在我们可以读取文件而不会出错。
import json
file_name = 'example.json'
with open(file_name, 'r', encoding='utf-8') as f:
my_data = json.load(f)
# 👇️ [{'id': 1, 'name': 'Alice', 'age': 30}, {'id': 2, 'name': 'Bob', 'age': 35}, {'id': 3, 'name': 'Carl', 'age': 40}]
print(my_data)
或者,我们可以在 json 对象中添加一个新属性。
example.json
{ "employees": [ {"id": 1, "name": "Alice", "age": 30}, {"id": 2, "name": "Bob", "age": 35}, {"id": 3, "name": "Carl", "age": 40} ] }
现在解析 JSON 文件将为我们提供一个 Python 字典。
import json
file_name = 'example.json'
with open(file_name, 'r', encoding='utf-8') as f:
my_data = json.load(f)
# 👇️ {'employees': [{'id': 1, 'name': 'Alice', 'age': 30}, {'id': 2, 'name': 'Bob', 'age': 35}, {'id': 3, 'name': 'Carl', 'age': 40}]}
print(my_data)
如果我们无法控制 JSON 数据,请尝试使用列表理解并解析每一行。
想象一下,我们有以下 JSON。
{"id": 1, "name": "Alice", "age": 30}
{"id": 2, "name": "Bob", "age": 35}
{"id": 3, "name": "Carl", "age": 40}
这是一个解析每一行的列表推导。
import json
data = [json.loads(line)
for line in open('example.json', 'r', encoding='utf-8')]
# 👇️ [{'id': 1, 'name': 'Alice', 'age': 30}, {'id': 2, 'name': 'Bob', 'age': 35}, {'id': 3, 'name': 'carl', 'age': 40}]
print(data)
我们使用 json.loads
方法将每一行解析为本机 Python 对象并将这些行添加到列表中。
但是,这只有在每一行都包含有效的
JSON
时才有效。
验证和更正 JSON 的最快方法是使用 JSON 验证器。
将我们的有效载荷粘贴到表单中,验证器检查错误,有时直接修复它们。
如果我们从远程 API 获取数据,则必须查看 API 返回的数据并在后端更正问题。
相关文章
Python for 循环中的下一项
发布时间:2023/04/26 浏览次数:179 分类:Python
-
本文讨论了 Python 中的 for 循环以及如何通过使用 for 循环和示例来跳过列表的第一个元素。
Python While 循环用户输入
发布时间:2023/04/26 浏览次数:148 分类:Python
-
我们可以在 while 循环中使用 input() 函数来输入数据,直到在 Python 中满足某个条件。
在 Python 中将整数转换为罗马数字
发布时间:2023/04/26 浏览次数:87 分类:Python
-
本篇文章将介绍在 Python 中将整数转换为罗马数字。以下是一个 Python 程序的实现,它将给定的整数转换为其等效的罗马数字。
在 Python 中将罗马数字转换为整数
发布时间:2023/04/26 浏览次数:144 分类:Python
-
本文讨论如何在 Python 中将罗马数字转换为整数。 我们将使用 Python if 语句来执行此操作。 我们还将探讨在 Python 中将罗马数字更改为整数的更多方法。
在 Python 中读取 gzip 文件
发布时间:2023/04/26 浏览次数:70 分类:Python
-
本篇文章强调了压缩文件的重要性,并演示了如何在 Python 中使用 gzip 进行压缩和解压缩。
在 Python 中锁定文件
发布时间:2023/04/26 浏览次数:141 分类:Python
-
本文解释了为什么在 Python 中锁定文件很重要。 这讨论了当两个进程在没有锁的情况下与共享资源交互时会发生什么的示例,为什么在放置锁之前知道文件状态很重要,等等
在 Python 中将 PDF 转换为文本
发布时间:2023/04/26 浏览次数:196 分类:Python
-
在本教程中,我们将学习如何使用 Python 使用 PyPDF2、Aspose 和 PDFminer 将 PDF 文档转换为文本文件。
在 Python 中创建临时文件
发布时间:2023/04/26 浏览次数:53 分类:Python
-
本文讲解了tempfile库函数的四个子函数:TemporaryFile、NamedTemporaryFile、mkstemp、TemporaryDirectory。 每个部分都提供了适当的程序,以简化对概念的理解。