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

serde_json能否将JSON字段名映射为不同的Rust结构体字段名?

serde_json 不同名字段映射实现方法

完全可以,serde_json 依托 serde 原生的派生宏属性就能实现JSON属性名和Rust结构体字段名的自定义映射,不需要手写解析逻辑。

针对你给出的示例,只需要在结构体的对应字段上添加#[serde(rename = "json字段实际名称")]标记即可,完整代码写法如下:

use serde::Deserialize;

// 派生反序列化宏
#[derive(Deserialize)]
struct StructName {
    // 指定该字段对应JSON里的json_name属性
    #[serde(rename = "json_name")]
    struct_name: i32
}

用上述定义的结构体解析你给出的JSON内容:

{
    "json_name": 3
}

就能直接得到值为StructName { struct_name: 3 }的结构体实例,完全匹配需求。

补充实用规则

  • 如果整个结构体的字段和JSON字段都遵循固定的命名风格差异(比如JSON统一用蛇形命名、Rust结构体统一用驼峰命名),不需要给每个字段单独加rename标记,直接在结构体定义上方添加全局命名转换规则即可,例如:
    #[derive(Deserialize, Serialize)]
    #[serde(rename_all = "snake_case")] // 所有字段自动映射为蛇形命名的JSON属性
    struct Example {
        first_field: i32,
        second_field: String
    }
    
    目前支持的自动转换规则包括camelCase、snake_case、PascalCase、SCREAMING_SNAKE_CASE、kebab-case等常见命名格式。
  • rename属性的映射是双向生效的:反序列化时会把指定名称的JSON字段解析到对应结构体字段,序列化时也会把结构体字段输出为你指定名称的JSON属性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 04:48:19