选择嵌套列表的第一个元素



我正在尝试获取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"
}
]

相关内容

  • 没有找到相关文章

最新更新