从查询之后jsonpath数组中抽取单个元件(extracting single element f

2019-09-27 11:19发布

我试图从使用JSON-路径的JSON字符串的值。 我怀疑我的问题是相关应用后谓语从JSONPath阵列结果获取特定对象 ,但该链接并没有提供给我的答案。 我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 [?(@。名== '昨天')]。all.count” 返回[3](在逻辑上)和I假定取第一元件从结果阵列就足够了,但我的结果数组总是空空的。我在做什么错?

Answer 1:

count属性本身是不是在你的JSON所以数组符号上的一组countcount[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);


文章来源: extracting single element from jsonpath array after query
标签: java jsonpath