考虑以下示例JSON:

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


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

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


我会得到结果:

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


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

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

最佳答案

我在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[?([email protected])].name


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

关于java - JsonPath语法是否“不包括”或否定匹配?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42031746/

10-09 05:11