方法名称 | 描述 |
---|---|
json.loads() | 将JSON格式的字符串解析成Python对象(如字典或列表) |
json.dumps() | 将Python对象(如字典或列表)转换成JSON格式的字符串 |
json.load() | 从文件中读取JSON格式的数据,并解析成Python对象 |
json.dump() | 将Python对象转换成JSON格式的数据,并写入文件 |
json.JSONDecoder() | 创建一个JSON解码器对象,用于解析JSON字符串(通常直接使用json.loads()更常见) |
json.JSONEncoder() | 创建一个JSON编码器对象,用于将Python对象转换成JSON字符串(通常直接使用json.dumps()更常见) |
json.JSONDecodeError | 异常类,用于处理JSON解码时发生的错误 |
json.loads() 是Python标准库 json 模块中的一个函数,用于将JSON格式的字符串解析(解码)成Python对象。这个过程是反序列化的一部分,即将数据从一种格式(在这个情况下是JSON字符串)转换成另一种格式(在这个情况下是Python的数据结构,如字典或列表)。
Python对象:通常是字典(对应于JSON对象)或列表(对应于JSON数组)。如果JSON字符串表示的是其他类型(如字符串、数字、布尔值、null),则返回相应的Python类型。
import json
# 一个简单的JSON字符串
json_str = '{"name": "Alice", "age": 30, "is_student": false}'
# 使用json.loads()将JSON字符串解析成Python对象
python_obj = json.loads(json_str)
# 打印解析后的Python对象
print(python_obj) # 输出: {'name': 'Alice', 'age': 30, 'is_student': False}
# 访问解析后的对象属性
print(python_obj['name']) # 输出: Alice
print(python_obj['age']) # 输出: 30
print(python_obj['is_student']) # 输出: False
json.dumps() 是Python标准库 json 模块中的一个函数,用于将Python对象编码(序列化)成JSON格式的字符串。这个过程是序列化的一部分,即将数据从一种格式(在这个情况下是Python的数据结构,如字典或列表)转换成另一种格式(在这个情况下是JSON字符串)。
str: 编码后的JSON格式的字符串。
import json
# 一个简单的Python对象(字典)
python_obj = {'name': 'Alice', 'age': 30, 'is_student': False}
# 使用json.dumps()将Python对象编码成JSON字符串
json_str = json.dumps(python_obj)
# 打印编码后的JSON字符串
print(json_str) # 输出: '{"name": "Alice", "age": 30, "is_student": false}'
# 使用indent参数来美化输出
pretty_json_str = json.dumps(python_obj, indent=4)
print(pretty_json_str)
# 输出:
# {
# "name": "Alice",
# "age": 30,
# "is_student": false
# }
json.load() 是Python标准库 json 模块中的一个函数,用于从文件中读取JSON格式的数据,并将其解析(解码)成Python对象。这个过程是反序列化的一部分,即将数据从一种格式(在这个情况下是JSON文件)转换成另一种格式(在这个情况下是Python的数据结构,如字典或列表)。
Python对象:通常是字典(对应于JSON对象)或列表(对应于JSON数组)。如果JSON文件表示的是其他类型(如字符串、数字、布尔值、null),则返回相应的Python类型。
import json
# 假设有一个名为'data.json'的文件,内容如下:
# {
# "name": "Alice",
# "age": 30,
# "is_student": false
# }
# 打开JSON文件并读取数据
with open('data.json', 'r', encoding='utf-8') as f:
python_obj = json.load(f)
# 打印解析后的Python对象
print(python_obj) # 输出: {'name': 'Alice', 'age': 30, 'is_student': False}
# 访问解析后的对象属性
print(python_obj['name']) # 输出: Alice
json.dump() 是Python标准库 json 模块中的一个函数,用于将Python对象编码(序列化)成JSON格式,并将结果写入到一个文件中。这个过程是序列化的一部分,即将数据从一种格式(在这个情况下是Python的数据结构,如字典或列表)转换成另一种格式(在这个情况下是JSON文件)。
None:json.dump() 不返回任何值,它将编码后的JSON数据直接写入到提供的文件对象中。
import json
# 一个简单的Python对象(字典)
python_obj = {'name': 'Alice', 'age': 30, 'is_student': False}
# 打开一个文件以写入JSON数据
with open('output.json', 'w', encoding='utf-8') as f:
json.dump(python_obj, f)
# 现在'output.json'文件包含了编码后的JSON数据
json.JSONDecoder 提供了一个接口来解码JSON字符串。你可以创建一个JSONDecoder实例,然后使用它的.decode()方法来解码JSON数据。
json.JSONDecoder(object_hook=None, parse_float=None, parse_int=None, parse_constant=None, strict=True, object_pairs_hook=None)
.decode(s, _w=None): 解码JSON字符串s。_w是一个内部参数,通常不需要用户设置。
import json
# 创建一个JSONDecoder实例
decoder = json.JSONDecoder(object_hook=lambda d: {k.upper(): v for k, v in d.items()})
# JSON字符串
json_str = '{"name": "Alice", "age": 25}'
# 解码JSON字符串
decoded_obj = decoder.decode(json_str)
# 打印解码后的对象
print(decoded_obj) # 输出: {'NAME': 'Alice', 'AGE': 25}
在这个示例中,我们创建了一个JSONDecoder实例,并通过object_hook参数提供了一个函数,该函数将解码后的字典中的所有键转换为大写。然后,我们使用这个解码器的.decode()方法来解码一个JSON字符串,并打印出解码后的对象。
在Python的json模块中,json.JSONEncoder是一个类,它提供了将Python对象编码(即序列化)为JSON字符串的接口。虽然json.dumps()函数是序列化Python对象为JSON字符串的常用方法,但在需要更细粒度的控制或想要重用编码器对象的情况下,可以使用json.JSONEncoder。 json.JSONEncoder类允许你创建一个编码器实例,并通过其.encode()方法将Python对象转换为JSON字符串。
json.JSONEncoder(skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, sort_keys=False, indent=None, separators=None, default=None)
.encode(o): 将Python对象o编码为JSON字符串。
import json
# 创建一个JSONEncoder实例,配置美化输出
encoder = json.JSONEncoder(indent=4, sort_keys=True)
# 一个Python对象(字典)
python_obj = {
'name': 'Alice',
'age': 25,
'is_student': False,
'courses': ['Math', 'Science', 'Art'],
'address': {
'street': '123 Main St',
'city': 'Wonderland'
}
}
# 将Python对象编码为JSON字符串
json_str = encoder.encode(python_obj)
# 打印JSON字符串
print(json_str)
在这个示例中,我们创建了一个JSONEncoder实例,并通过indent和sort_keys参数配置了美化输出。然后,我们使用这个编码器的.encode()方法将一个Python对象(字典)编码为JSON字符串,并打印出来。
在Python的json模块中,json.JSONDecodeError是一个异常类,用于在解码(反序列化)JSON数据时报告错误。这个异常是在尝试将JSON格式的字符串转换为Python对象时,如果JSON数据格式不正确或无法解析,就会引发此异常。 json.JSONDecodeError是ValueError的一个子类,因此它继承了ValueError的所有属性和方法。此外,JSONDecodeError还提供了一些额外的属性,以帮助开发者诊断和修复解码过程中的问题。
import json
# 一个格式不正确的JSON字符串
invalid_json = '{"name": "Alice", "age": 25, "is_student": '
try:
# 尝试解码JSON字符串
data = json.loads(invalid_json)
except json.JSONDecodeError as e:
# 捕获JSONDecodeError异常并打印错误信息
print(f"JSONDecodeError occurred: {e.msg}")
print(f"Error position: {e.pos} in document: {e.doc[:e.pos]}...")
# 如果可用,打印行号和列号
if hasattr(e, 'lineno'):
print(f"Error line number: {e.lineno}, column number: {e.colno}")
在这个示例中,我们尝试解码一个格式不正确的JSON字符串(缺少一个引号来闭合is_student的值)。由于JSON数据格式不正确,json.loads()函数会引发json.JSONDecodeError异常。我们捕获了这个异常,并打印了错误消息、错误位置以及(如果可用的话)行号和列号。