You need to enable JavaScript to run this app. 如何使用Java Reflection实现JSON与Java类异名字段的自定义映射
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Java Reflection实现JSON与Java类异名字段的自定义映射

自定义反射实现映射器的可行方案
  • 第一步:自定义映射注解解耦配置,定义@JsonFieldBind注解,内部加String sourceKey()属性,用来标注Java字段对应的JSON字段名。你当前场景的字段可以直接标注:
    • Parent类的Name1上标注@JsonFieldBind(sourceKey = "FirstName")
    • Parent类的Name2上标注@JsonFieldBind(sourceKey = "LastName")(注意你原Java代码此处笔误写为Nama2,需修正)
    • Address类的data上标注@JsonFieldBind(sourceKey = "street")
    • Parent类的address上标注@JsonFieldBind(sourceKey = "Address")
  • 第二步:先将JSON字符串解析为嵌套的JSONObject/Map结构,不需要提前绑定目标类,仅需要拿到键值对映射关系。
  • 第三步:编写通用反射赋值逻辑:
    1. 获取目标类的无参构造器,实例化空白的目标对象。
    2. 调用getDeclaredFields()获取目标类所有声明字段,设置field.setAccessible(true)绕过私有字段访问校验。
    3. 遍历每个字段,优先取字段上@JsonFieldBind注解的sourceKey作为取值键,没有注解则直接用字段名作为取值键。
    4. 从JSON结构中取出对应键的值,若值为基础类型(字符串、数值、布尔)直接调用field.set(目标实例, 取值)完成赋值。
    5. 若值为数组/列表类型,先通过Field.getGenericType()拿到List的泛型参数类(比如你场景里的Address类),遍历JSON数组的每个元素,递归调用当前赋值逻辑生成泛型类实例,组装为List后赋值给对应字段。
    6. 若值为嵌套对象类型,直接递归调用赋值逻辑生成嵌套对象后赋值即可。
  • 第四步:可扩展增加类型转换、默认值填充、异常兼容等能力,完善映射器的通用性。
更推荐的第三方API方案(无需重复造轮子)

目前Java生态已有成熟的JSON转Java对象库,原生支持自定义字段映射,不需要自己手写反射逻辑:

  • Jackson:Java生态最通用的JSON处理库,用@JsonProperty注解标注对应JSON字段即可,示例代码:
import com.fasterxml.jackson.annotation.JsonProperty;
import java.util.List;

// 注意原代码Class首字母大写属于语法错误,修正为小写class
class Parent{
    @JsonProperty("FirstName")
    private String Name1;
    @JsonProperty("LastName")
    private String Name2;
    @JsonProperty("Address")
    private List<Address> address;
    // 此处可添加getter、setter,或者用Lombok简化代码
}

class Address{
    private String type;
    @JsonProperty("street")
    private String data;
    // 此处可添加getter、setter,或者用Lombok简化代码
}

反序列化仅需一行代码即可完成:

Parent result = new ObjectMapper().readValue(合法JSON字符串, Parent.class);
  • Gson:Google出品的JSON处理库,用法和Jackson类似,用@SerializedName注解标注映射的JSON字段即可。

注意:你给出的示例JSON存在语法错误,键名未加双引号、对象末尾多了冗余逗号,实际使用时需先修正为合法JSON格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.13 20:30:04