我正在尝试使用 json-path 从 json 字符串中提取值。 我怀疑我的问题与 Get specific object from JSONPath array result after predicate is applied 有关但该链接没有为我提供答案。我的 json 文件如下所示:
{
"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=='yesterday')].all.count"返回 [3] (逻辑上),我假设从结果数组中取出第一个元素就足够了,但我的结果数组始终为空。 我做错了什么?
最佳答案
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);
关于java - 查询后从 jsonpath 数组中提取单个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50768925/