如何在JMESPath中实现标量与数组值的笛卡尔积组合?
在JMESPath中实现标量与数组元素的组合并生成扁平字典数组
当然可以!这个需求用JMESPath的map函数结合对象构造语法就能完美实现,甚至还能顺便把bars字段名改成bar,完全匹配你的预期结果。
核心表达式
直接用这个JMESPath表达式就能搞定:
map(&{"foo": foo, "bar": @}, bars)
表达式拆解
让我给你解释下每部分的作用:
map(..., bars):map函数会遍历bars数组中的每一个元素,把后面的匿名函数应用到每个元素上&{"foo": foo, "bar": @}:这是JMESPath的匿名函数语法,&表示这是一个待执行的函数:foo:直接引用顶层字典里的foo标量值(也就是"aa"),保证每个新字典里的foo都和原字典一致@:代表当前遍历到的bars数组元素(第一次是"bb",第二次是"cc"),把它赋值给新字段bar
实际运行效果
输入字典:
{ "foo": "aa", "bars": [ "bb", "cc" ] }
执行表达式后得到的结果:
[ { "foo": "aa", "bar": "bb" }, { "foo": "aa", "bar": "cc" } ]
如果只是需要组合元素而不修改字段名,表达式可以简化为:
map(&{"foo": foo, "bars": @}, bars)
不过显然你需要的是改名后的版本,所以第一个表达式完全符合你的需求。
内容的提问来源于stack exchange,提问作者Christian
相关产品推荐
相关产品推荐

