将 JSON 数据高效映射为类型安全、可访问的 Java 对象-java教程

本文介绍如何使用 jackson 库将嵌套 json 结构(含数组与对象)精准反序列化为结构清晰、支持 getter/setter 访问的 java 实体类,替代原始 map 方式,提升代码可维护性与类型安全性。

在实际开发中,直接将 JSON 解析为 Map(如 GSON 的 TypeToken 方式)虽能快速读取数据,但缺乏编译期类型检查、无法直接调用属性方法、难以进行字段级编辑或校验,且嵌套结构(如 systems 数组中的对象列表)访问繁琐易错。更专业、可持续的方案是基于 JSON 结构定义强类型的 Java Bean 类,并借助成熟的序列化库完成双向映射。

推荐使用 Jackson Databind(比 GSON 更广泛用于 Spring 生态,对泛型、嵌套集合支持更稳健)。首先,根据提供的 JSON 结构创建两个对应类:

// 主配置类,对应顶层 JSON 对象
public class AppInventory {
    private String title;
    private String description;
    private List systems;

    // 构造函数(可选)
    public AppInventory() {}

    // Getter 和 Setter 方法(务必完整实现,否则 Jackson 反序列化失败)
    public String getTitle() { return title; }
    public void setTitle(String title) { this.title = title; }

    public String getDescription() { return description; }
    public void setDescription(String description) { this.description = description; }

    public List getSystems() { return systems; }
    public void setSystems(List systems) { this.systems = systems; }
}

// 嵌套系统信息类,对应 "systems" 数组中的每个对象
public class SystemInfo {
    private String name;
    private String purpose;
    private String owner;
    private List subOwner;  // 注意:JSON 中键名为 "sub_owner",Java 属性名可小写驼峰
    private String location;
    private String tag;

    // Getter 和 Setter(同上,必须提供)
    public String getName() { return name; }
    public void setName(String name) { this.name = name; }

    public String getPurpose() { return purpose; }
    public void setPurpose(String purpose) { this.purpose = purpose; }

    public String getOwner() { return owner; }
    public void setOwner(String owner) { this.owner = owner; }

    public List getSubOwner() { return subOwner; }
    public void setSubOwner(List subOwner) { this.subOwner = subOwner; }

    public String getLocation() { return location; }
    public void setLocation(String location) { this.location = location; }

    public String getTag() { return tag; }
    public void setTag(String tag) { this.tag = tag; }
}

✅ 关键注意事项:Jackson 默认按 Java Bean 约定(getter/setter) 匹配字段,不依赖 @JsonProperty 注解即可工作;若 JSON 键名与 Java 属性名不一致(如 “sub_owner” → subOwner),Jackson 默认启用 SNAKE_CASE 或 LOWER_CAMEL_CASE 自动映射(2.12+ 版本默认支持下划线转驼峰);所有字段的 setter 方法必须存在,否则反序列化时该字段将为 null;使用 List 而非原始数组,便于后续增删改查操作;若需兼容旧版 Jackson 或自定义命名策略,可在 ObjectMapper 中配置:ObjectMapper mapper = new ObjectMapper();
mapper.setPropertyNamingStrategy(PropertyNamingStrategies.SNAKE_CASE);

接下来,执行反序列化并访问/修改数据:

夏夕资源网专注于CMS网站模板,主流语言整站网站源码下载,网站建设相关教程分享,好用的软件素材整合下载,提供一站式便捷自助服务。
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,默认解压密码为"zy.lucklyus.top",如遇到无法解压的请联系管理员!
夏夕资源网-网站模板_免费源码_资源素材 » 将 JSON 数据高效映射为类型安全、可访问的 Java 对象-java教程
在线时间:12:00 - 22:00
关注微信公众号:微信公众号
站长邮箱:[email protected]
  • 运营天数: 1393+
  • 资源总数: 47989+
  • 用户总数: 1+
  • 今日更新: 0+
  • 访问次数: 4024429+
  • 本周更新: 0+
  • 最后更新: 2026-03-16

本站指数

×
  • 运营天数: 1393+
  • 资源总数: 47989+
  • 用户总数: 1+
  • 今日更新: 0+
  • 访问次数: 4024429+
  • 本周更新: 0+
  • 最后更新: 2026-03-16