Java中如何将含字符串与整数的嵌套JSON数组解析为POJO?
解决方案
1. 定义适配的POJO结构
首先调整POJO保证和JSON字段完全匹配,避免反序列化异常:
// 响应根对象 public class ApiRootResponse { private InnerResponse response; // 生成Getter、Setter方法 } // response内部对象 public class InnerResponse { private String version; // 和JSON的data字段对应,如果你要保留原有values命名,加@JsonProperty("data")注解即可 private List<List<Object>> data; // 生成Getter、Setter方法 }
这个结构可以100%兼容返回的JSON格式,不会出现映射失败的问题。
2. 遍历提取目标值的实现逻辑
以下是基于Jackson库的实现代码,如果你用Fastjson等其他JSON库,仅需替换嵌套JSON解析的API即可:
import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import java.util.ArrayList; import java.util.List; // 初始化目标列表 List<String> coreLists = new ArrayList<>(); List<String> frameList = new ArrayList<>(); ObjectMapper objectMapper = new ObjectMapper(); // 假设已经完成反序列化得到了InnerResponse对象 InnerResponse resp = apiRootResponse.getResponse(); for (List<Object> dataGroup : resp.getData()) { // 跳过每组第一个固定的"*"元素,从第二个元素开始遍历 for (int i = 1; i < dataGroup.size(); i++) { List<Object> item = (List<Object>) dataGroup.get(i); Object content = item.get(0); // 跳过内容为null的项 if (content == null) { continue; } String contentStr = String.valueOf(content); // 判断是否为frame嵌套JSON if (contentStr.startsWith("{\"frame\"")) { // 解析嵌套的JSON字符串,提取frame数组内容 JsonNode rootNode = objectMapper.readTree(contentStr); JsonNode frameArray = rootNode.get("frame"); if (frameArray.isArray()) { for (JsonNode frame : frameArray) { frameList.add(frame.asText()); } } } else { // 普通字符串直接存入core列表 coreLists.add(contentStr); } } }
执行完成后,coreLists 就会包含core1、core2、core3,frameList会包含frame1、frame2,符合你的需求。
内容的提问来源于stack exchange,提问作者Jerrin Thomas
相关产品推荐
相关产品推荐

