如何用JMESPath将嵌套数组与同层级prefix键拼接得到目标字符串数组
解决方案
问题原因
你之前的写法返回null或报错的核心原因是:map函数中lambda表达式的默认上下文是postfix数组的单个元素(即"aaa"/"bbb"这类字符串),这个上下文里不存在prefix属性,因此无法直接访问外层对象的prefix值。
正确查询语句
使用let表达式提前绑定外层的prefix值,再在map内部引用即可,完整命令如下:
cat multiple.json | jp "[*].let({pre: prefix}, &map(&join('', [$pre, @]), postfix))[]"
执行后会直接输出你期望的结果:
[ "one-aaa", "one-bbb", "one-ccc", "two-aaa", "two-bbb", "two-ccc" ]
语法说明
let({pre: prefix}, &...):遍历每个外层对象时,把当前对象的prefix值绑定到变量pre,后续在第二个参数的表达式内可以用$pre引用这个值- 内层
map函数使用绑定好的$pre和当前遍历的postfix元素@拼接字符串 - 末尾的
[]用来把两层数组合并打平为一维数组
内容的提问来源于stack exchange,提问作者aberends
相关产品推荐
相关产品推荐

