如何用JsonPath提取JSON中rateCode后的soldQty或拆分节点
JSON数据处理解决方案
需求1:提取主节点中rateCode对应的soldQty值
你之前用的$..soldQty会递归匹配所有层级的soldQty(包括pacPick和invTyp子节点下的),$..soldQty[0]仅取第一个匹配到的soldQty,都无法精准获取主节点的目标值。
正确的JsonPath表达式需直接定位数组元素的主节点soldQty:
// 提取所有主节点的soldQty,返回List类型 List<?> soldQtyList = JsonPath.read(DataSet, "$[*].soldQty"); String sldQtyString = soldQtyList.toString();
说明:
$[*]遍历JSON数组中的每一个主节点对象.soldQty直接获取当前主节点下的soldQty字段值
需求2:拆分每个节点为主节点和单独的invTyp节点
可以通过JsonPath分别提取指定字段组成主节点,以及单独提取invTyp字段:
提取主节点(包含Code、Name、rateCode、soldQty、revAmnt、pacPick)
// 提取所有符合要求的主节点,返回List<Map<String, Object>> List<Map<String, Object>> mainNodes = JsonPath.read(DataSet, "$[*].{Code:Code, Name:Name, rateCode:rateCode, soldQty:soldQty, revAmnt:revAmnt, pacPick:pacPick}");
提取单独的invTyp节点列表
// 提取所有invTyp数组,返回List<List<Map<String, Object>>> List<List<Map<String, Object>>> invTypList = JsonPath.read(DataSet, "$[*].invTyp");
如果需要逐个处理每个节点的拆分:
// 先获取整个原始节点数组 List<Map<String, Object>> originalNodes = JsonPath.read(DataSet, "$[*]"); for (Map<String, Object> node : originalNodes) { // 构建主节点 Map<String, Object> mainNode = new HashMap<>(); mainNode.put("Code", node.get("Code")); mainNode.put("Name", node.get("Name")); mainNode.put("rateCode", node.get("rateCode")); mainNode.put("soldQty", node.get("soldQty")); mainNode.put("revAmnt", node.get("revAmnt")); mainNode.put("pacPick", node.get("pacPick")); // 提取invTyp List<Map<String, Object>> invTyp = (List<Map<String, Object>>) node.get("invTyp"); // 后续按需处理mainNode和invTyp }
内容的提问来源于stack exchange,提问作者user30794534
相关产品推荐
相关产品推荐

