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

如何用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 22:24:50