python 学习: dataclasses_json的使用
·
dataclasses_json 是 Python 中一个用于处理数据类(dataclass)与 JSON 之间序列化和反序列化的库,它可以
简化数据类与 JSON 格式(字典格式)的相互转换操作。
1 . 安装
pip install dataclasses-json
2. 基本使用方法
(1). 基本示例
使用 @dataclass 和 @dataclass_json 装饰器来定义一个支持 JSON 转换的数据类:
from dataclasses import dataclass
from dataclasses_json import dataclass_json
@dataclass_json
@dataclass
class Person:
name: str
age: int
is_student: bool
# 创建对象
person = Person("Alice", 20, True)
# 序列化为 JSON 字符串
json_str = person.to_json()
print("JSON 字符串:", json_str)
# 输出: {"name": "Alice", "age": 20, "is_student": true}
# 从 JSON 字符串反序列化
person_from_json = Person.from_json(json_str)
print("反序列化对象:", person_from_json)
# 输出: Person(name='Alice', age=20, is_student=True)
# 转换为字典
person_dict = person.to_dict()
print("字典形式:", person_dict)
# 输出: {'name': 'Alice', 'age': 20, 'is_student': True}
# 从字典反序列化
person_from_dict = Person.from_dict(person_dict)
print("从字典创建对象:", person_from_dict)
(2). 处理嵌套数据类
dataclasses_json 支持嵌套的数据类结构:
from dataclasses import dataclass
from dataclasses_json import dataclass_json
@dataclass_json
@dataclass
class Address:
street: str
city: str
@dataclass_json
@dataclass
class User:
name: str
address: Address
# 创建嵌套对象
user = User("Bob", Address("Main St", "New York"))
# 序列化为 JSON
json_str = user.to_json()
print(json_str)
# 输出: {"name": "Bob", "address": {"street": "Main St", "city": "New York"}}
# 反序列化
user_from_json = User.from_json(json_str)
print(user_from_json.address.city) # 输出: New York
(3) 处理可选字段和默认值
from dataclasses import dataclass, field
from dataclasses_json import dataclass_json
from typing import Optional
@dataclass_json
@dataclass
class Book:
title: str
author: str
pages: Optional[int] = None # 可选字段
publisher: str = field(default="Unknown Publisher") # 默认值
# 序列化
book = Book("Python Guide", "John Doe")
print(book.to_json())
# 输出: {"title": "Python Guide", "author": "John Doe", "pages": null, "publisher": "Unknown Publisher"}
常用方法总结
- to_json(): 将数据类对象转换为 JSON 字符串
- from_json(json_str): 从 JSON 字符串创建数据类对象
to_dict(): 将数据类对象转换为字典- from_dict(dict_obj): 从字典创建数据类对象
dataclasses_json 特别适合在需要处理 JSON 数据交换的场景(如 API 开发、配置文件处理等)中使用,它能够大大简化数据序列化和反序列化的代码量。
更多推荐


所有评论(0)