Python 中常用的 JSON 操作方法
在 Python 里,json 模块提供了丰富的功能来处理 JSON(JavaScript Object Notation)数据。除了常见的 json.loads 和 json.dumps 方法外,还有其他一些实用的 JSON 操作方法,下面为你详细介绍。
1. json.loads
作用
json.loads 方法用于将 JSON 格式的字符串解析为 Python 对象(如字典、列表等)。它把符合 JSON 语法的字符串转换为 Python 能直接操作的数据结构。
示例代码
import json
# 定义一个 JSON 格式的字符串
json_str = '{"name": "Alice", "age": 25, "hobbies": ["reading", "swimming"]}'
# 使用 json.loads 将 JSON 字符串转换为 Python 字典
python_dict = json.loads(json_str)
# 打印转换后的 Python 字典
print(python_dict)
print(type(python_dict)) # 查看转换后对象的类型
# 访问字典中的元素
print(python_dict["name"])
print(python_dict["hobbies"])
代码解释
- 首先定义了一个 JSON 格式的字符串
json_str。 - 调用
json.loads(json_str)将该字符串转换为 Python 字典python_dict。 - 打印转换后的字典及其类型,验证转换结果。
- 最后通过字典的键访问其中的元素。
输出结果
{'name': 'Alice', 'age': 25, 'hobbies': ['reading', 'swimming']}
<class 'dict'>
Alice
['reading', 'swimming']
2. json.dumps
作用
json.dumps 方法用于将 Python 对象(如字典、列表等)转换为 JSON 格式的字符串。它把 Python 数据结构转换为符合 JSON 语法的字符串,方便在网络传输或存储中使用。
示例代码
import json
# 定义一个 Python 字典
python_dict = {
"name": "Bob",
"age": 30,
"hobbies": ["running", "painting"]
}
# 使用 json.dumps 将 Python 字典转换为 JSON 字符串
json_str = json.dumps(python_dict)
# 打印转换后的 JSON 字符串
print(json_str)
print(type(json_str)) # 查看转换后对象的类型
代码解释
- 先定义了一个 Python 字典
python_dict。 - 调用
json.dumps(python_dict)将该字典转换为 JSON 格式的字符串json_str。 - 打印转换后的字符串及其类型,验证转换结果。
输出结果
{"name": "Bob", "age": 30, "hobbies": ["running", "painting"]}
<class 'str'>
json.dumps 的可选参数
json.dumps 还有一些可选参数,例如 indent 用于设置缩进,使生成的 JSON 字符串更易读:
import json
python_dict = {
"name": "Bob",
"age": 30,
"hobbies": ["running", "painting"]
}
# 使用 indent 参数设置缩进
json_str = json.dumps(python_dict, indent=4)
print(json_str)
输出结果
{
"name": "Bob",
"age": 30,
"hobbies": [
"running",
"painting"
]
}
3. json.load
作用
json.load 用于从文件对象中读取 JSON 数据,并将其解析为 Python 对象。与 json.loads 不同,json.loads 处理的是字符串,而 json.load 处理的是文件对象。
示例代码
import json
# 打开一个包含 JSON 数据的文件
with open('data.json', 'r', encoding='utf-8') as file:
# 从文件中读取并解析 JSON 数据
data = json.load(file)
print(data)
print(type(data))
代码解释
- 使用
open函数以只读模式打开data.json文件。 - 调用
json.load(file)从文件对象file中读取 JSON 数据并解析为 Python 对象。 - 打印解析后的数据及其类型。
4. json.dump
作用
json.dump 用于将 Python 对象转换为 JSON 格式的字符串,并将其写入文件对象中。和 json.dumps 不同,json.dumps 返回的是字符串,而 json.dump 是将结果写入文件。
示例代码
import json
# 定义一个 Python 字典
data = {
"name": "Charlie",
"age": 35,
"hobbies": ["cycling", "photography"]
}
# 打开一个文件以写入 JSON 数据
with open('output.json', 'w', encoding='utf-8') as file:
# 将 Python 对象转换为 JSON 格式并写入文件
json.dump(data, file, indent=4, ensure_ascii=False)
代码解释
- 定义一个 Python 字典
data。 - 使用
open函数以写入模式打开output.json文件。 - 调用
json.dump(data, file, indent=4, ensure_ascii=False)将字典data转换为 JSON 格式并写入文件,indent=4用于设置缩进,ensure_ascii=False用于确保非 ASCII 字符能正确写入。
5. json.JSONEncoder
作用
json.JSONEncoder 是一个用于自定义 JSON 编码的类。当你需要将自定义的 Python 对象转换为 JSON 格式时,可以通过继承 json.JSONEncoder 类并重写 default 方法来实现。
示例代码
import json
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
class PersonEncoder(json.JSONEncoder):
def default(self, obj):
if isinstance(obj, Person):
return {"name": obj.name, "age": obj.age}
return super().default(obj)
# 创建一个自定义对象
person = Person("David", 40)
# 使用自定义编码器将对象转换为 JSON 字符串
json_str = json.dumps(person, cls=PersonEncoder)
print(json_str)
代码解释
- 定义了一个
Person类表示一个人。 - 定义了一个
PersonEncoder类,继承自json.JSONEncoder,并重写了default方法,用于处理Person对象的编码。 - 创建一个
Person对象person。 - 调用
json.dumps(person, cls=PersonEncoder)使用自定义编码器将person对象转换为 JSON 字符串。
6. json.JSONDecoder
作用
json.JSONDecoder 是一个用于自定义 JSON 解码的类。当你需要将 JSON 数据解码为自定义的 Python 对象时,可以通过继承 json.JSONDecoder 类并重写 object_hook 方法来实现。
示例代码
import json
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def __repr__(self):
return f"Person(name='{self.name}', age={self.age})"
def person_decoder(dct):
if 'name' in dct and 'age' in dct:
return Person(dct['name'], dct['age'])
return dct
# 定义一个 JSON 字符串
json_str = '{"name": "Eve", "age": 45}'
# 使用自定义解码器将 JSON 字符串解码为自定义对象
person = json.loads(json_str, object_hook=person_decoder)
print(person)
代码解释
- 定义了一个
Person类表示一个人,并实现了__repr__方法用于打印对象信息。 - 定义了一个
person_decoder函数,用于处理 JSON 对象的解码。 - 定义一个 JSON 字符串
json_str。 - 调用
json.loads(json_str, object_hook=person_decoder)使用自定义解码器将 JSON 字符串解码为Person对象。
这些方法可以满足不同场景下的 JSON 数据处理需求,帮助你更灵活地操作 JSON 数据。
4万+

被折叠的 条评论
为什么被折叠?



