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
相关产品推荐
相关产品推荐

