首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >查询后从jsonpath数组中提取单个元素

查询后从jsonpath数组中提取单个元素
EN

Stack Overflow用户
提问于 2018-06-09 06:01:26
回答 1查看 1.5K关注 0票数 1

我正在尝试使用json-path从json字符串中提取一个值。我怀疑我的问题与Get specific object from JSONPath array result after predicate is applied有关,但该链接没有为我提供答案。我的this文件如下所示:

代码语言:javascript
复制
{
  "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数组的位置可能会发生变化:

代码语言:javascript
复制
ReadContext ctx = JsonPath.parse(content);
ctx.read("$.results.payments[2].all.count");

我试着使用名称匹配:

代码语言:javascript
复制
ctx.read("$.results.payments[?(@.name=='yesterday')].all.count[0]")

我的问题是这总是返回一个空数组。ctx.read("$.results.payments?(@.name=='yesterday').all.count“返回3,我假设从结果数组中取出第一个元素就足够了,但我的结果数组始终为空。我做错了什么?

EN

回答 1

Stack Overflow用户

发布于 2018-06-09 09:01:29

count属性本身不是JSON中的数组,因此count上的数组表示法(如count[0] )不起作用。但是表达式$.results.payments[?(@.name == 'yesterday')].all.count在求值时会返回一个count列表,所以要获得第一个元素,我们可以只获取列表中的第一个元素:

代码语言:javascript
复制
List<Integer> yesterdayCounts = ctx.read("$.results.payments[?(@.name == 'yesterday')].all.count");
int firstCount = yesterdayCounts.get(0);

assertThat(firstCount).isEqualTo(3);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50768925

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档