"data": [{
"age": 123,
"name": "张三",
"cid": "111"
"age": 456,
"name": "李四",
"cid": "222"
age等于123和name等于张三 或 age等于456和name等于李四 层级当前层级数据怎么获取
@SneakyThrows
public static void main(String[] args) {
String jsonStr = "{\n" +
"\t\"data\": [{\n" +
"\t\t\"age\": 123,\n" +
"\t\t\"name\": \"张三\",\n" +
"\t\t\"cid\": \"111\"\n" +
"\t}, {\n" +
"\t\t\"age\": 456,\n" +
"\t\t\"name\": \"李四\",\n" +
"\t\t\"cid\": \"222\"\n" +
"\t}]\n" +
DocumentContext documentContext = JsonPath.parse(jsonStr);
Object object = documentContext.read("$.data.*");
List<JSONObject> jsonObjects = Convert.toList(JSONObject.class, object);
log.info("jsonObjects: {}", JSONUtil.toJsonStr(jsonObjects));
// 唯一字段---确定数据源否存在
Set<String> uniqueFields = ImmutableSet.of("age", "name");
// 子级数据路径模板
String sonPathFormat = "$.data[?(@.age == {age} && @.name == '{name}')].*";
jsonObjects.forEach(o -> {
// 子级数据路径
String sonPath = StrUtil.format(sonPathFormat, new Dict().set("age", o.get("age")).set("name", o.get("name")));
// 获取多个唯一字段对应的children
Object read = documentContext.read(sonPath);
log.info("children: {}", read.toString());
sonPathFormat
:$.data[?(@.age == {age} && @.name == '{name}')].*
JSONPath是一种用于在JSON(JavaScript Object Notation)数据中定位和提取特定元素的查询语言。它类似于XPath对XML的作用,可以帮助我们轻松地按照特定的路径表达式从复杂的JSON结构中获取所需的数据。
通过使用JSONPath,开发人员可以更有效地处理和解析JSON数据,同时减少冗余代码和手动遍历的工作量。它在Web开发、API集成、数据转换等领域具有广泛的应用。