JsonPath语法为“不包括”,或负匹配?

spr*_*rad 8 java jsonpath

考虑这个示例 JSON:

{
  "thing": [
    {
      "name": "foo",
      "flag": "yep"
    },
    {
      "name": "bar"
    },
    {
      "name": "baz",
      "flag": "nope"
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

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

$.thing[?(@.flag)].name
Run Code Online (Sandbox Code Playgroud)

我会得到结果:

'0' => "foo"
'1' => "baz"
Run Code Online (Sandbox Code Playgroud)

但是,如果我想找到所有没有相应“标志”的“名称”元素怎么办?

(就这个问题而言,我不关心“标志”的值,只关心它是否存在)

spr*_*rad 9

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

@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);
}
Run Code Online (Sandbox Code Playgroud)

因此,我正在寻找的否定匹配的语法就是:

$.thing[?(!@.flag)].name
Run Code Online (Sandbox Code Playgroud)

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