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 pandas.pivot_table() 函数
发布时间:2024/04/24 浏览次数:82 分类:Python
-
Python Pandas pivot_table()函数通过对数据进行汇总,避免了数据的重复。
在 Python 中将 Pandas 系列的日期时间转换为字符串
发布时间:2024/04/24 浏览次数:894 分类:Python
-
了解如何在 Python 中将 Pandas 系列日期时间转换为字符串
在 Python Pandas 中使用 str.split 将字符串拆分为两个列表列
发布时间:2024/04/24 浏览次数:1124 分类:Python
-
本教程介绍如何使用 pandas str.split() 函数将字符串拆分为两个列表列。
在 Pandas 中将 Timedelta 转换为 Int
发布时间:2024/04/23 浏览次数:231 分类:Python
-
可以使用 Pandas 中的 dt 属性将 timedelta 转换为整数。
Python 中的 Pandas 插入方法
发布时间:2024/04/23 浏览次数:112 分类:Python
-
本教程介绍了如何在 Pandas DataFrame 中使用 insert 方法在 DataFrame 中插入一列。
使用 Python 将 Pandas DataFrame 保存为 HTML
发布时间:2024/04/21 浏览次数:106 分类:Python
-
本教程演示如何将 Pandas DataFrame 转换为 Python 中的 HTML 表格。
如何将 Python 字典转换为 Pandas DataFrame
发布时间:2024/04/20 浏览次数:73 分类:Python
-
本教程演示如何将 python 字典转换为 Pandas DataFrame,例如使用 Pandas DataFrame 构造函数或 from_dict 方法。
如何在 Pandas 中将 DataFrame 列转换为日期时间
发布时间:2024/04/20 浏览次数:101 分类:Python
-
本文介绍如何将 Pandas DataFrame 列转换为 Python 日期时间。