我正在尝试获取JMESpath中列表列表中每个嵌套列表中的第一个元素。具体来说,我正在尝试以下变体:
aws redshift-data get-statement-result
--id 0de36215-f1db-421f-8704-3242e1a03f21
--query 'Records[][0]'
不幸的是,这导致父列表首先被展平,因此我只得到第一个列表的第一个元素。
输入数据(简化(为:
{
"Records": [
[{"stringValue": "rdsdb"},{"etc": 1}],
[{"stringValue": "testuser"},{"etc": 100}]
],
"ColumnMetadata": [{"etc": true}],
"TotalNumRows": 2
}
考虑到输入数据,我期望从中得到的输出:
[
{"stringValue": "rdsdb"},
{"stringValue": "testuser"}
]
如何获取列表列表中每个嵌套列表中的第一个元素?
根据我从您的评论中收集到的信息,您过度简化了示例,实际上您追求的是整个对象,而不是单个属性。
有了这个要求,您可以使用[*]
而不是[]
来实现它,因为与第二个相比,第一个不会使投影变平。
因此,给定JSON输入:
{
"Records": [
[{"stringValue": "rdsdb", "some-property": "foo"},{"etc": 1}],
[{"stringValue": "testuser"},{"etc": 100}]
],
"ColumnMetadata": [{"etc": true}],
"TotalNumRows": 2
}
查询:
Records[*][0]
收益率达到预期:
[
{
"stringValue": "rdsdb",
"some-property": "foo"
},
{
"stringValue": "testuser"
}
]
否则,您可以使用过滤器投影过滤掉阵列Records
的阵列中的所有对象,该过滤器投影将看起来密钥stringValue
不是null
(带有[?stringValue]
(
但是,由于[]
正在创建投影,正如您提出的那样,您必须首先使用管道操作符|
停止该投影,如链接文档一章中所述。
因此:
Records[]|[?stringValue]
这产生了预期的:
[
{
"stringValue": "rdsdb"
},
{
"stringValue": "testuser"
}
]