问题描述
我有一个奇怪的 JSON 结构(出于安全原因,我无法提供实际数据,但我可以提供结构,这才是真正重要的)。
鉴于以下结构:
[
{
"a": {
"b": {
"c": "d"
}
}
},{
"b": {
"c": "d"
}
},]
我需要有一种方法可以在不知道路径是否包含 c
的情况下始终到达 {{1}}。类似的东西:
a
或
[].*.b.c.d
有什么想法吗?
作为参考,我使用的是 python 的 jmespath 库。
解决方法
给定 JSON:
[
{
"a": {
"b": {
"c": "d (of a.b.c)"
}
}
},{
"b": {
"c": "d (of b.c)"
}
},{
"z": {
"b": {
"c": "d (of z.b.c)"
}
}
}
]
您可以结合使用 or expression (||
) 和 flatten operator ([]
) 来实现您想要的效果。
所以表达式:
[][*.b || b] [] []
在上面的 JSON 上会产生:
[
{
"c": "d (of a.b.c)"
},{
"c": "d (of b.c)"
},{
"c": "d (of z.b.c)"
}
]
请注意,我们必须使用 flatten 运算符两次,因为它的结构有时有两层,有时有三层。
如果您只想要 c
的值:
[][*.b || b] [] [].c
将产生:
[
"d (of a.b.c)","d (of b.c)","d (of z.b.c)"
]