如何用Jayway JSONPath获取指定条件下的JSON父节点属性
Jayway JSONPath 实战方案
一、获取eslTag等于"null"对应的sgln195值
要提取符合条件的sgln195,可以通过嵌套过滤定位目标节点:
JSONPath表达式
$.data.storeGtin.assignmentInfo.assignedLocations[?(@.assignments[?(@.eslTag == 'null')])].storeLocation.sgln195
表达式说明
- 遍历
assignedLocations数组,过滤出其中assignments子数组存在eslTag == 'null'的元素 - 从筛选出的
assignedLocations元素中,提取storeLocation.sgln195的值
Java代码示例
import com.jayway.jsonpath.JsonPath; import java.util.List; public class JsonPathDemo { public static void main(String[] args) { String jsonStr = "你的JSON数据字符串"; // 读取符合条件的sgln195列表 List<String> targetSgln195 = JsonPath.read(jsonStr, "$.data.storeGtin.assignmentInfo.assignedLocations[?(@.assignments[?(@.eslTag == 'null')])].storeLocation.sgln195"); System.out.println(targetSgln195); // 输出:["5577557755775W.SF.E.25.1"] } }
二、基于数组值获取上级节点
Jayway JSONPath支持^操作符实现向上导航,快速定位当前节点的父节点、祖父节点等上级节点。
场景1:获取eslTag为"null"的项所在的assignedLocations节点
JSONPath表达式
$.data.storeGtin.assignmentInfo.assignedLocations[*].assignments[?(@.eslTag == 'null')].^.^
表达式说明
@.^:表示当前节点的父节点(这里指assignments元素的父节点assignedLocations)- 连续两个
^:从assignments元素向上两级,直接定位到对应的assignedLocations节点
场景2:获取eslTag为"null"的项的父节点(assignments所在的上级对象)
JSONPath表达式
$.data.storeGtin.assignmentInfo.assignedLocations[*].assignments[?(@.eslTag == 'null')].^
Java代码示例
import com.jayway.jsonpath.JsonPath; import java.util.List; import java.util.Map; public class JsonPathParentDemo { public static void main(String[] args) { String jsonStr = "你的JSON数据字符串"; // 获取对应的assignedLocations节点 List<Map<String, Object>> parentNodes = JsonPath.read(jsonStr, "$.data.storeGtin.assignmentInfo.assignedLocations[*].assignments[?(@.eslTag == 'null')].^.^"); for (Map<String, Object> node : parentNodes) { System.out.println("节点容量:" + node.get("capacity")); Map<String, Object> storeLoc = (Map<String, Object>) node.get("storeLocation"); System.out.println("对应sgln195:" + storeLoc.get("sgln195")); } } }
内容的提问来源于stack exchange,提问作者Mahen C
相关产品推荐
相关产品推荐

