"does not include" 或否定匹配的 JsonPath 语法?
JsonPath syntax for "does not include", or negative matching?
考虑这个示例 JSON:
{
"thing": [
{
"name": "foo",
"flag": "yep"
},
{
"name": "bar"
},
{
"name": "baz",
"flag": "nope"
}
]
}
如果我想找到 DID 具有相应 'flag' 的所有 'name' 元素,我可以使用这样的东西:
$.thing[?(@.flag)].name
我会得到结果:
'0' => "foo"
'1' => "baz"
但是如果我想找到所有没有对应 'flag' 的 'name' 元素怎么办?
(为了这个问题的目的,我不关心 'flag' 的值,只关心它是否存在)
我仔细研究了 JsonPath 源代码 here (and specifically 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
里面还有很多其他很好的例子。如果它们在文档中就好了!
考虑这个示例 JSON:
{
"thing": [
{
"name": "foo",
"flag": "yep"
},
{
"name": "bar"
},
{
"name": "baz",
"flag": "nope"
}
]
}
如果我想找到 DID 具有相应 'flag' 的所有 'name' 元素,我可以使用这样的东西:
$.thing[?(@.flag)].name
我会得到结果:
'0' => "foo"
'1' => "baz"
但是如果我想找到所有没有对应 'flag' 的 'name' 元素怎么办?
(为了这个问题的目的,我不关心 'flag' 的值,只关心它是否存在)
我仔细研究了 JsonPath 源代码 here (and specifically 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
里面还有很多其他很好的例子。如果它们在文档中就好了!