我有以下JSON:
{
"A":{
"C":{
"date":"2022-01-23"
}
},
"B":{
"D":{
"date":"2022-01-24"
}
}
}
如果null
不是null
,我希望提取值$.A.C.date
,否则我希望提取$.B.D.date
。
基本上,我想用JsonPath
写一个if else
表达式,但是,我没有设法使它工作。
这是我尝试过的方法:
String expression = "$.[?($.[?(@.A.C.date != null)].date || $.[?(@.B.D.date != null)].date)]";
JsonPath jsonPath = JsonPath.compile(expression);
String json = "...my JSON...";
Object extractedValue = jsonPath.read(json);
System.out.println(extractedValue);
......但我得到的输出只是一个空数组:[]
.
我也试过这个:
"$.[?($.[?(@.A.C.date != null)].A.C.date || $.[?(@.B.D.date != null)].B.D.date)]"
......但是输出是一个包含所有元素的列表(因为两种情况下条件都匹配),然而我认为编写.A.C.date
只提取了date
,而不是所有内容:
[
{"A":{"C":{"date":"2022-01-23"}},
"B":{"D":{"date":"2022-01-24"}}}
]
有人有什么想法吗?我在网上找不到任何类似的东西。
这是我使用的依赖关系:
<dependency>
<groupId>com.jayway.jsonpath</groupId>
<artifactId>json-path</artifactId>
<version>2.4.0</version>
</dependency>
2条答案
按热度按时间ctehm74n1#
以下是使用
com.jayway.jsonpath
的可能解决方案它获取所有非空日期,然后打印第一个。
bfhwhh0e2#
你可以考虑另一个库 Josson 来做这项工作。
https://github.com/octomix/josson
产出