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

Java解析嵌套JSON数组提取name与type信息的实现方案问询

解决方案

Java生态下解析JSON常用Jackson、FastJSON2两个主流库,你只需要提取managedObjects下的name和对应types信息,不需要定义完整嵌套POJO,直接用树模型解析最简便,两种实现方案如下:

注意你给出的JSON示例省略了键值对之间的逗号,实际接口返回的合法JSON无需额外处理可直接解析

方案1:Jackson(Spring项目默认集成,无需额外引入依赖)

import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.util.HashMap;
import java.util.Map;

public class JsonParseTest {
    public static void main(String[] args) throws Exception {
        // 替换为你实际拿到的API响应字符串
        String apiResponse = "你的JSON响应内容";
        ObjectMapper objectMapper = new ObjectMapper();
        JsonNode root = objectMapper.readTree(apiResponse);
        
        Map<String, JsonNode> nameTypeMap = new HashMap<>();
        JsonNode managedObjects = root.get("managedObjects");
        // 遍历managedObjects数组
        if (managedObjects.isArray()) {
            for (JsonNode item : managedObjects) {
                // 取name值作为key
                String name = item.get("name").asText();
                // 取types节点作为value,也可以按需提取types下的单个字段
                JsonNode typeInfo = item.get("types");
                nameTypeMap.put(name, typeInfo);
                
                // 如果需要把types转成自定义Java对象,可定义对应的Type类后用以下代码转换
                // Type type = objectMapper.treeToValue(typeInfo, Type.class);
                // nameTypeMap.put(name, type);
            }
        }
        // 后续直接使用nameTypeMap即可
    }

    // 自定义Type类,仅需要转成Java对象时定义,不需要可删除
    static class Type {
        private String name;
        private String place;
        private String self;
        private String version;
        // 补充getter、setter方法即可
    }
}

方案2:FastJSON2(API更简洁,性能更优)

import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONObject;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class JsonParseTest {
    public static void main(String[] args) {
        // 替换为你实际拿到的API响应字符串
        String apiResponse = "你的JSON响应内容";
        JSONObject root = JSON.parseObject(apiResponse);
        
        Map<String, JSONObject> nameTypeMap = new HashMap<>();
        List<JSONObject> managedObjects = root.getJSONArray("managedObjects").toJavaList(JSONObject.class);
        for (JSONObject item : managedObjects) {
            String name = item.getString("name");
            JSONObject typeInfo = item.getJSONObject("types");
            nameTypeMap.put(name, typeInfo);
        }
        // 后续直接使用nameTypeMap即可
    }
}

如果后续需要解析JSON中更多字段,可定义和JSON结构匹配的完整POJO类,直接用反序列化方法把整个JSON转成Java对象,代码会更规范易维护。

内容的提问来源于stack exchange,提问作者Rakshan Premsagar Kapikad

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 00:27:03