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

如何构建Java对象结构实现嵌套JSON反序列化至指定POJO

解决方案:处理含动态键的JSON反序列化问题

核心结论

必须自定义反序列化逻辑——在线生成器仅能适配固定结构的JSON,完全无法处理Incident::xxx这类动态键的场景。

具体实现方案(以Jackson为例)

  • 定义目标Test类
    public class Test {
        private String id;
        private String title;
    
        // 构造方法、getter/setter自行补充
    }
    
  • 自定义反序列化器
    继承JsonDeserializer,遍历JSON中的动态键,提取嵌套结构内的id和title:
    public class TestListDeserializer extends JsonDeserializer<List<Test>> {
        @Override
        public List<Test> deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {
            List<Test> testList = new ArrayList<>();
            JsonNode rootNode = p.getCodec().readTree(p);
    
            // 遍历所有动态键(如Incident::xxx)
            for (Iterator<String> it = rootNode.fieldNames(); it.hasNext(); ) {
                JsonNode incidentNode = rootNode.get(it.next());
                Test test = new Test();
                test.setId(incidentNode.get("id").asText());
                test.setTitle(incidentNode.get("title").asText());
                testList.add(test);
            }
            return testList;
        }
    }
    
  • 注册并使用反序列化器
    ObjectMapper mapper = new ObjectMapper();
    SimpleModule module = new SimpleModule();
    module.addDeserializer(List.class, new TestListDeserializer());
    mapper.registerModule(module);
    
    // jsonString为原始JSON字符串
    List<Test> testList = mapper.readValue(jsonString, new TypeReference<List<Test>>() {});
    
  • 轻量替代方案:Map过渡
    若不想编写自定义反序列化器,可先将JSON反序列化为Map,再转换为Test对象:
    Map<String, Map<String, String>> rawMap = mapper.readValue(jsonString, new TypeReference<Map<String, Map<String, String>>>() {});
    List<Test> testList = rawMap.values().stream()
        .map(map -> new Test(map.get("id"), map.get("title")))
        .collect(Collectors.toList());
    

补充说明

  • 若动态键对应的嵌套结构包含更多字段,只需在Test类中新增属性,同步修改反序列化逻辑即可。
  • 若使用Gson框架,逻辑完全相通——自定义JsonDeserializer或用Map过渡均适用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 04:22:06