Python: json模块
2025-04-18 09:24:04
8
参考资料
Python json
模块简介
功能: 用于JSON数据的编码(序列化)与解码(反序列化)。
核心用途: 处理Python对象与JSON格式字符串之间的转换。
主要方法及参数说明
1. json.dumps()
(序列化)
功能: 将Python对象转为JSON字符串。
参数:
obj
: 要序列化的对象(如字典、列表)。indent
: 缩进空格数(美化输出,如indent=4
)。sort_keys
: 是否按键排序(True/False
)。ensure_ascii
: 非ASCII字符是否转义(默认True
,设为False
可保留中文)。default
: 指定自定义对象的序列化函数。
2. json.loads()
(反序列化)
功能: 将JSON字符串转为Python对象。
参数:
s
: JSON格式字符串。object_hook
: 自定义字典的解码函数(如转为自定义类)。
3. json.dump()
与 json.load()
功能: 与
dumps
/loads
类似,但直接操作文件对象。参数:
需传入文件对象(如
open('file.json', 'w')
)。
使用方法
序列化示例
import json data = {"name": "Alice", "age": 25, "hobbies": ["reading", "hiking"]} json_str = json.dumps(data, indent=4, ensure_ascii=False) print(json_str)
输出:
{ "name": "Alice", "age": 25, "hobbies": ["reading", "hiking"] }
反序列化示例
json_str = '{"name": "Bob", "score": 90}' python_dict = json.loads(json_str) print(python_dict["name"]) # 输出: Bob
文件操作示例
# 写入JSON文件 with open('data.json', 'w') as f: json.dump(data, f) # 读取JSON文件 with open('data.json', 'r') as f: loaded_data = json.load(f)
案例解析:自定义对象序列化
需求: 序列化一个自定义类Person
的实例。
class Person: def __init__(self, name, age): self.name = name self.age = age # 自定义序列化函数 def person_to_dict(p): return {"name": p.name, "age": p.age} person = Person("Charlie", 30) json_str = json.dumps(person, default=person_to_dict) print(json_str) # 输出: {"name": "Charlie", "age": 30}
反序列化为对象:
def dict_to_person(d): return Person(d["name"], d["age"]) python_obj = json.loads(json_str, object_hook=dict_to_person) print(python_obj.name) # 输出: Charlie
注意事项
JSON仅支持基本数据类型(字符串、数字、列表、字典、布尔值、
None
)。自定义对象需通过
default
参数或继承JSONEncoder
类处理。文件操作时注意编码(推荐
open
使用encoding='utf-8'
)。