我正在尝试使用json-path从json字符串中提取值。 我怀疑我的问题与Get specific object from JSONPath array result after predicate is applied有关,但链接并没有为我提供答案。我的jsonfile看起来像这样:
{
"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数组中元素的位置,可以改变:
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 =='昨天')]。all.count"返回[3](逻辑上)我假设服用了结果数组中的第一个元素就足够了,但我的结果数组总是空的。 我做错了什么?
答案 0 :(得分:0)
count
属性本身不是JSON中的数组,因此count
上的数组表示法(例如count[0]
)不起作用。但是,在计算时,表达式$.results.payments[?(@.name == 'yesterday')].all.count
返回一个Java列表,以便获得第一个count
,我们可以从列表中获取第一个元素:
List<Integer> yesterdayCounts = ctx.read("$.results.payments[?(@.name == 'yesterday')].all.count");
int firstCount = yesterdayCounts.get(0);
assertThat(firstCount).isEqualTo(3);