我正在尝试使用json-path从json字符串中提取一个值。我怀疑我的问题与Get specific object from JSONPath array result after predicate is applied有关,但该链接没有为我提供答案。我的this文件如下所示:
{
"success": true,
"errorKey": null,
"results": {
"payments": [
{
"name": "current",
"all": {
"revenue": 390.32,
"count": 1
}
},
{
"name": "sameYesterday",
"all": {
"revenue": 613.24,
"count": 4
}
},
{
"name": "yesterday",
"all": {
"revenue": 613.24,
"count": 3
}
}
]
}
}我想知道昨天的付款情况。下面的查询肯定有效,但它依赖于json数组中元素的位置,而json数组的位置可能会发生变化:
ReadContext ctx = JsonPath.parse(content);
ctx.read("$.results.payments[2].all.count");我试着使用名称匹配:
ctx.read("$.results.payments[?(@.name=='yesterday')].all.count[0]")我的问题是这总是返回一个空数组。ctx.read("$.results.payments?(@.name=='yesterday').all.count“返回3,我假设从结果数组中取出第一个元素就足够了,但我的结果数组始终为空。我做错了什么?
发布于 2018-06-09 09:01:29
count属性本身不是JSON中的数组,因此count上的数组表示法(如count[0] )不起作用。但是表达式$.results.payments[?(@.name == 'yesterday')].all.count在求值时会返回一个count列表,所以要获得第一个元素,我们可以只获取列表中的第一个元素:
List<Integer> yesterdayCounts = ctx.read("$.results.payments[?(@.name == 'yesterday')].all.count");
int firstCount = yesterdayCounts.get(0);
assertThat(firstCount).isEqualTo(3);https://stackoverflow.com/questions/50768925
复制相似问题