JsonPath语法为“不包含”,还是否定匹配?

时间:2017-02-03 19:33:51

标签: java jsonpath

考虑这个样本JSON:

{
  "thing": [
    {
      "name": "foo",
      "flag": "yep"
    },
    {
      "name": "bar"
    },
    {
      "name": "baz",
      "flag": "nope"
    }
  ]
}

如果我想查找DID具有相应“标志”的所有“名称”元素,我可以使用以下内容:

$.thing[?(@.flag)].name

我会得到结果:

'0' => "foo"
'1' => "baz"

但是,如果我想找到所有没有相应“标志”的'name'元素呢?

(出于这个问题的目的,我不关心'flag'的价值,只关注它是否存在)

1 个答案:

答案 0 :(得分:1)

我在JsonPath源代码here(特别是here)中挖掘并找到了这个测试:

@Test
public void a_not_exists_filter_can_be_serialized() {

    String filter = filter(where("a").exists(false)).toString();
    String parsed = parse("[?(!@['a'])]").toString();

    assertThat(filter).isEqualTo(parsed);
}

所以我正在寻找的负面匹配的语法就是:

$.thing[?(!@.flag)].name

那里还有很多其他很好的例子。如果他们在文档中就好了!