You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何创建含保留关键字class的JSON映射类以支持POST请求

解决JSON保留关键字"class"的映射问题

当JSON字段名和编程语言的保留关键字冲突时,核心解决思路是通过序列化/反序列化框架的注解,将合法的类属性名与JSON的关键字字段做映射,以下是几种主流编程语言的具体实现:

Java(Jackson/Gson框架)

Jackson实现

在类属性上添加@JsonProperty注解,指定对应的JSON字段名:

// 定义内部模型类
class Department {
    private String id;
    private String refName;
    // getter、setter省略
}

class ClassInfo {
    private String id;
    private String refName;
    // getter、setter省略
}

class ItemDetail {
    private Department department;
    // 用@JsonProperty关联JSON的"class"字段
    @JsonProperty("class")
    private ClassInfo classInfo;
    // getter、setter省略
}

class Item {
    private List<ItemDetail> items;
    // getter、setter省略
}

序列化/反序列化时,Jackson会自动识别注解,完成classInfo和JSON中class字段的映射。

Gson实现

Gson用@SerializedName注解,写法类似:

class ItemDetail {
    private Department department;
    @SerializedName("class")
    private ClassInfo classInfo;
    // getter、setter省略
}

Python(Pydantic/原生json模块)

Pydantic实现

用Field(alias="class")指定别名,序列化时需开启by_alias=True:

from pydantic import BaseModel, Field

class Department(BaseModel):
    id: str
    refName: str

class ClassInfo(BaseModel):
    id: str
    refName: str

class ItemDetail(BaseModel):
    department: Department
    # 用alias关联JSON的"class"字段
    class_info: ClassInfo = Field(alias="class")

class Item(BaseModel):
    items: list[ItemDetail]

# 序列化时要加by_alias=True,才能输出"class"字段
payload = Item(items=[ItemDetail(department=Department(id="5", refName="test"), class_info=ClassInfo(id="2", refName="test"))])
print(payload.model_dump_json(by_alias=True))

原生json模块实现

如果不用框架,可手动处理字段映射:

# 定义普通类
class ItemDetail:
    def __init__(self, department, class_info):
        self.department = department
        self.class_info = class_info

# 转JSON时手动替换字段名
def item_detail_to_dict(item_detail):
    result = {
        "department": item_detail.department.__dict__,
        "class": item_detail.class_info.__dict__
    }
    return result

# 反序列化时同理,把"class"字段赋值给class_info属性

C#(Newtonsoft.Json框架)

用JsonProperty特性指定映射:

public class Department {
    public string id { get; set; }
    public string refName { get; set; }
}

public class ClassInfo {
    public string id { get; set; }
    public string refName { get; set; }
}

public class ItemDetail {
    public Department department { get; set; }
    [JsonProperty("class")]
    public ClassInfo ClassInfo { get; set; }
}

public class Item {
    public List<ItemDetail> items { get; set; }
}

通用兜底方案

如果不想依赖框架注解,也可以在发送POST请求前,手动修改JSON结构:将内存中的对象转成字典/JSON字符串后,把合法属性名(比如classInfo)替换成class;接收响应时再反向替换。但这种方式代码冗余,不如框架注解优雅。

内容的提问来源于stack exchange,提问作者SSD

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 10:35:07