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

Java读取resources目录JSON文件(含嵌套数组)生成对象列表方法

问题场景

需要通过Java读取JSON文件并将内容转换为对象列表,当前解析遇到两个核心难点:

  • 待解析JSON的根节点是数组,而非常规的单个JSON对象
  • 一级数组的每个元素内部还包含嵌套的子数组,无法完成正确的字段映射

待解析的JSON结构如下(注:原JSON存在语法笔误,name字段名后缺失闭合双引号,解析前需先修正):

[
  {
    "name": "Andrew",
    "age": 21, 
    "parents": [
      {
        "name": "Joseph",
        "age": 18
      },
      {
        "name": "Joseph",
        "age": 18
      }
    ]
  },
  {
    "name": "Maria",
    "age": 35, 
    "parents": [
      {
        "name": "Kassandra",
        "age": 16
      },
      {
        "name": "Abigail",
        "age": 22
      }
    ]
  }
]
实现方案

直接用Java生态主流的JSON序列化类库就能搞定,Jackson和Gson是目前生产环境用得最多的两个选项,两者都原生支持根节点为数组的JSON解析,也能自动完成嵌套数组、嵌套对象的字段映射,完全不需要手动逐层拆节点。
具体操作流程:

  • 先写两个和JSON结构匹配的普通Java类:
    一个对应外层数组的元素,比如叫Person,字段和JSON里的一级key对应:字符串类型的name、整数类型的age、List<Parent>类型的parents;
    另一个对应parents数组里的子元素,比如叫Parent,字段就是字符串类型的name、整数类型的age,字段名和JSON里的key保持一致就行,不需要额外加注解。
  • 解析的时候不要硬套“根节点必须是对象”的思路,两个类库都提供了泛型类型参数来支持集合类型的根节点:
    用Jackson的话,创建ObjectMapper实例,调用readValue方法读JSON输入源的时候,第二个参数传new TypeReference<List<Person>>(){},方法返回的结果直接就是List<Person>类型,里面的parents字段会自动映射成List<Parent>,不需要额外处理。
    用Gson的话逻辑完全一致,创建Gson实例,调用fromJson方法的时候,第二个参数传new TypeToken<List<Person>>(){}.getType(),就能直接拿到目标对象列表。
  • 注意先排查JSON本身的语法问题:原示例JSON里两处"name: "Andrew"、"name: "Maria"的name字段名后面都少了闭合双引号,属于非法JSON格式,这种情况不管用什么类库都会解析失败,先把JSON语法修正再跑解析逻辑。

2022年11月6日 编辑:我已经整理了完整的可运行实现方案记录,在此感谢所有提供思路和帮助的开发者。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 16:24:29