You need to enable JavaScript to run this app. Python Dataclass(Marshmallow)如何处理接口响应中的动态键
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.12 01:30:02