Select 嵌套列表列表的第一个元素
Select first element of a nested list of lists
我试图在 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"}
]
如何获取列表列表中每个嵌套列表中的第一个元素?
根据我从您的评论中收集到的信息,您过度简化了您的示例并且您实际上是在追求整个对象,而不是单个 属性。
根据该要求,您可以使用 [*]
而不是 []
来实现它,如 the first one does not flatten projections, compared to the second one。
因此,给定 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]
但是因为 []
正在创建投影,正如您提出的那样,您必须 stop that projection first, with the pipe operator |
,如链接文档章节中所述。
所以给出:
Records[]|[?stringValue]
这会产生预期的结果:
[
{
"stringValue": "rdsdb"
},
{
"stringValue": "testuser"
}
]
我试图在 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"}
]
如何获取列表列表中每个嵌套列表中的第一个元素?
根据我从您的评论中收集到的信息,您过度简化了您的示例并且您实际上是在追求整个对象,而不是单个 属性。
根据该要求,您可以使用 [*]
而不是 []
来实现它,如 the first one does not flatten projections, compared to the second one。
因此,给定 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]
但是因为 []
正在创建投影,正如您提出的那样,您必须 stop that projection first, with the pipe operator |
,如链接文档章节中所述。
所以给出:
Records[]|[?stringValue]
这会产生预期的结果:
[
{
"stringValue": "rdsdb"
},
{
"stringValue": "testuser"
}
]