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 开发、配置文件处理等)中使用,它能够大大简化数据序列化和反序列化的代码量。

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐