JMESPath 密钥可能不存在的路径
JMESPath Path Where Key Might Not Exist
我有一个奇怪的 JSON 构造(出于安全原因我无法提供实际数据,但我可以提供结构,这才是真正重要的)。
给定以下结构:
[
{
"a": {
"b": {
"c": "d"
}
}
},
{
"b": {
"c": "d"
}
},
]
我需要有一种方法可以在不知道路径是否包含 a
的情况下始终到达 c
。类似于:
[].*.b.c.d
或
[].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 (||
) and the 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)"
]
我有一个奇怪的 JSON 构造(出于安全原因我无法提供实际数据,但我可以提供结构,这才是真正重要的)。
给定以下结构:
[
{
"a": {
"b": {
"c": "d"
}
}
},
{
"b": {
"c": "d"
}
},
]
我需要有一种方法可以在不知道路径是否包含 a
的情况下始终到达 c
。类似于:
[].*.b.c.d
或
[].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 (||
) and the 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)"
]