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

Java中使用Gson库如何读取JSON的@odata.context变量

Gson处理特殊命名JSON字段方案

问题场景

处理JSON结构时遇到包含@、.等特殊字符的键名,示例JSON片段:

{
  "@odata.context":"https://te.avolutionsoftware.com/api/$metadata#Components/$entity"
}

直接按照键名定义Java字段private String @odata.context;不符合Java标识符语法规范,无法通过编译。

具体解决步骤

使用Gson提供的@SerializedName注解做字段名映射即可,步骤如下:

  • 在实体类中定义符合Java命名规范的自定义字段名
  • 在字段上添加@SerializedName注解,注解的参数值填入JSON中实际的特殊键名

示例代码:

import com.google.gson.Gson;
import com.google.gson.annotations.SerializedName;

// 自定义实体类
public class ComponentEntity {
    // 注解内写JSON真实键名,字段名自行按Java规范定义
    @SerializedName("@odata.context")
    private String odataContext;

    // 自行补充getter、setter方法,或使用Lombok等工具简化
    public String getOdataContext() {
        return odataContext;
    }

    public void setOdataContext(String odataContext) {
        this.odataContext = odataContext;
    }

    public static void main(String[] args) {
        String jsonStr = "{\"@odata.context\":\"https://te.avolutionsoftware.com/api/$metadata#Components/$entity\"}";
        // 正常调用Gson方法反序列化即可,无需额外配置
        ComponentEntity entity = new Gson().fromJson(jsonStr, ComponentEntity.class);
        System.out.println(entity.getOdataContext());
    }
}

运行后可以正常读取到特殊键名对应的字段值,序列化时Gson也会自动把字段输出为@odata.context的键名。

同类问题通用检索方向

  • 单字段特殊命名/字段名不匹配场景:检索当前使用的JSON库(Gson/Jackson/Fastjson等)的自定义字段名映射注解,所有主流JSON库都提供了对应注解实现键名和Java字段的绑定
  • 全局统一命名规则转换场景(比如驼峰转下划线、全大写转驼峰等):检索对应JSON库的全局命名策略配置,配置后无需给单个字段加注解,自动完成全量字段的命名转换
  • 动态键名、含转义字符的极端特殊键名场景:检索对应JSON库的自定义反序列化器、Json树模型解析相关API,直接操作底层JSON节点完成取值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 12:36:20