我试图找到一种应用以下过滤器的程序方法。给定以下对象,如何获取所有包含child的顶级键c2
?
{
"a1" : {
"b" : {
"c1": {},
"c2": {}
}
},
"a2" : {
"b" : {
"c1" : {}
}
},
"a3" : {
"b" : {
"c1" : {},
"c2" : {}
}
}
}
预期结果:
["a1", "a3"]
我需要使用JSONPath,JMESPath或ObjectPath语法的过滤器。
我试过无数的组合$.*[@.b.c2]
在ObjectPath,像$..[?(b.c2)]
在JSONPath,下降到结构,如@.* | [?contains(keys(@), 'c2')]
或@.*[b.c2] | @
在JMESPath -一切都是徒劳。
在ObjectPath中,选择器仅在列表上起作用,因此$。* [@。b.c2]没有任何作用。像您的示例中那样的嵌套对象很少见,因此我没有实现所需的方法。您可以尝试将对象转换为如下数组:
[
{
"name": "a1",
"b": {
"c1": {},
"c2": {}
}
},
{
"name": "a2",
"b": {
"c1": {}
}
},
{
"name": "a3",
"b": {
"c1": {},
"c2": {}
}
}
]
然后使用选择器。
$。* [@。b.c2不为空] .name
PS。使用Github的最新ObjectPath版本。一分钟前,我修复了一些空比较问题。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句