根据子键筛选 JSON 个对象
Filter JSON object based on children keys
我正在尝试找到一种应用以下过滤器的程序方法。
给定以下对象,我如何获得包含子 c2
?
的所有顶级键
{
"a1" : {
"b" : {
"c1": {},
"c2": {}
}
},
"a2" : {
"b" : {
"c1" : {}
}
},
"a3" : {
"b" : {
"c1" : {},
"c2" : {}
}
}
}
预期结果:
["a1", "a3"]
我需要 JSONPath、JMESPath 或 ObjectPath 语法中的过滤器。
我在 ObjectPath 中尝试了 $.*[@.b.c2]
的无数组合,在 JSONPath 中尝试了 $..[?(b.c2)]
之类的组合,一直到 JMESPath 中的 @.* | [?contains(keys(@), 'c2')]
或 @.*[b.c2] | @
之类的结构 - 都无济于事.
在 ObjectPath 中,选择器只对列表有效,所以 $.*[@.b.c2] 没有任何作用。像你的例子中那样的嵌套对象很少见,所以我没有实现一种方法来做你需要的事情。您可以尝试将对象转换为如下数组:
[
{
"name": "a1",
"b": {
"c1": {},
"c2": {}
}
},
{
"name": "a2",
"b": {
"c1": {}
}
},
{
"name": "a3",
"b": {
"c1": {},
"c2": {}
}
}
]
然后使用选择器。
$.*[@.b.c2 不为空].name
PS。使用来自 Github 的最新 ObjectPath 版本。我刚刚在一分钟前解决了空值比较的一些问题。
我正在尝试找到一种应用以下过滤器的程序方法。
给定以下对象,我如何获得包含子 c2
?
{
"a1" : {
"b" : {
"c1": {},
"c2": {}
}
},
"a2" : {
"b" : {
"c1" : {}
}
},
"a3" : {
"b" : {
"c1" : {},
"c2" : {}
}
}
}
预期结果:
["a1", "a3"]
我需要 JSONPath、JMESPath 或 ObjectPath 语法中的过滤器。
我在 ObjectPath 中尝试了 $.*[@.b.c2]
的无数组合,在 JSONPath 中尝试了 $..[?(b.c2)]
之类的组合,一直到 JMESPath 中的 @.* | [?contains(keys(@), 'c2')]
或 @.*[b.c2] | @
之类的结构 - 都无济于事.
在 ObjectPath 中,选择器只对列表有效,所以 $.*[@.b.c2] 没有任何作用。像你的例子中那样的嵌套对象很少见,所以我没有实现一种方法来做你需要的事情。您可以尝试将对象转换为如下数组:
[
{
"name": "a1",
"b": {
"c1": {},
"c2": {}
}
},
{
"name": "a2",
"b": {
"c1": {}
}
},
{
"name": "a3",
"b": {
"c1": {},
"c2": {}
}
}
]
然后使用选择器。
$.*[@.b.c2 不为空].name
PS。使用来自 Github 的最新 ObjectPath 版本。我刚刚在一分钟前解决了空值比较的一些问题。