如何使用JMESPath获取嵌套列表中每个子列表的首个元素
解决方案
正确的JMESPath表达式为Records[*][0],直接替换原命令中的--query参数即可。
原写法错误原因
你之前使用的Records[][0]中,[]属于JMESPath的扁平化投影,会先把Records下的所有嵌套子列表展开为一维数组,再取第0位,因此只能拿到第一个元素。而[*]是列表通配符投影,仅遍历当前父列表的每一个子元素,不会主动扁平化嵌套结构,遍历每个子列表时取第0位就能得到预期结果。
完整命令示例
aws redshift-data get-statement-result \ --id 0de36215-f1db-421f-8704-3242e1a03f21 \ --query 'Records[*][0]'
如果需要更明确的函数式写法,也可以用map函数实现相同效果,对应表达式为map(&[0], Records),命令写法如下:
aws redshift-data get-statement-result \ --id 0de36215-f1db-421f-8704-3242e1a03f21 \ --query 'map(&[0], Records)'
以上两种写法基于你提供的输入数据,都会输出你期望的结果:
[ {"stringValue": "rdsdb"}, {"stringValue": "testuser"} ]
内容的提问来源于stack exchange,提问作者Alex Harvey
相关产品推荐
相关产品推荐

