我正在使用帶有 json 輸出的 AWS CLI 命令,它創建了一個陣列:
aws lambda list-functions --region us-east-2 --query 'Functions[?starts_with(FunctionName, `DEV`) == `true`].FunctionName' --output json
回傳:
[
"DEV-Lambda1-xxxx",
"DEV-Lambda2-xxxx",
"DEV-Lambda3-xxxx",
"DEV-Lambda4-xxxx"
]
為了正確使用 Terraform 中的輸出,我需要它是一個 JSON object。這是一個簡化的示例:
{
"lambda1": "DEV-Lambda1-xxxx",
"lambda2": "DEV-Lambda2-xxxx",
"lambda3": "DEV-Lambda3-xxxx",
"lambda4": "DEV-Lambda4-xxxx"
}
我想使用jq1.5 或更高版本。如何將陣列轉置為物件?
我只能做到這一點:
map( { ("lambda"): . } ) | add
僅輸出最后一個 lambda:
{
"lambda": "DEV-Lambda4-xxxx"
}
uj5u.com熱心網友回復:
您可以對陣列進行范圍迭代并形成所需的 k/v 對
jq '[ range(0; length) as $r |
{ ( .[$r] | split("-")[1] | ascii_downcase) : .[$r] } ] | add'
jqplay - 演示(1)
或對陣列進行轉置并形成 k/v 對
jq --slurp 'transpose |
map( { ( .[] | split("-")[1] | ascii_downcase) : .[] } ) | add'
jqplay - 演示(2)
uj5u.com熱心網友回復:
另一種方法可能是使用to_entries | map(…) | from_entries,或其快捷方式with_entries(…)。
然后根據靜態字串和數字索引更改鍵:
jq 'with_entries(.key |= "lambda\(. 1)")'
演示
或者在值的中間部分的小寫版本上:
jq 'with_entries(.key = ((.value / "-")[1] | ascii_downcase))'
演示
{
"lambda1": "DEV-Lambda1-xxxx",
"lambda2": "DEV-Lambda2-xxxx",
"lambda3": "DEV-Lambda3-xxxx",
"lambda4": "DEV-Lambda4-xxxx"
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/452081.html
