根据子项过滤JSON对象

休伯特·格热斯科维克

我试图找到一种应用以下过滤器的程序方法。给定以下对象,如何获取所有包含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 -一切都是徒劳。

阿德里安·卡尔巴奇克(Adrian Kalbarczyk)

在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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章