Python Dataclass(Marshmallow)如何处理接口响应中的动态键
动态键响应的dataclass编写方案
你使用的dataclasses_json库原生支持字典类型映射动态键,只需要把动态键对应的层级声明为Dict类型,键的类型填对应动态键的实际类型(本次场景是字符串格式的数字,所以用str),值的类型填动态键对应值的静态结构dataclass即可,完整实现如下:
代码实现
1. 定义各层级静态结构dataclass
from dataclasses import dataclass from typing import Dict, List, Optional from dataclasses_json import dataclass_json # 最内层parentGroupId的固定结构 @dataclass_json @dataclass class ParentGroupId: model: str id: str # 动态数字键对应的值的固定结构 @dataclass_json @dataclass class CloudResource: id: str name: str parentGroupId: ParentGroupId # 该层级下其他固定字段可以继续补充
2. 定义含动态键的层级结构
# cloudTest下是动态数字键,所以声明为Dict类型 @dataclass_json @dataclass class ByIdContent: cloudTest: Dict[str, CloudResource] # 外层响应整体结构(根据你实际的响应结构补充其他固定字段即可) @dataclass_json @dataclass class ApiResponse: byId: ByIdContent # 其他外层固定字段比如code、msg等可以继续补充
使用方法
解析完成后,直接通过字典方法访问资源即可,不需要关心具体的动态键值:
- 获取所有资源列表:
list(api_response.byId.cloudTest.values()) - 已知ID获取对应资源:
api_response.byId.cloudTest["55456"] - 遍历所有资源:
for res_id, resource in api_response.byId.cloudTest.items(): print(f"资源ID: {res_id}, 资源名称: {resource.name}")
如果后续遇到更多层动态键的场景,只需要在对应层级继续嵌套Dict类型声明即可。
内容的提问来源于stack exchange,提问作者Aerofight
相关产品推荐
相关产品推荐

