如何转换JSON输入
{
"Subnets": [
{
"VpcId": "vpc-xxx",
"Tags": [
{
"Value": "staging_subnet_private_a",
"Key": "Name"
}
],
"SubnetId": "subnet-xxx"
},
...
]
}
到
[
{
"SubnetId": "subnet-xxx",
"Name": "staging_subnet_private_a"
},
...
]
使用jq?
我有一个使用jq '[.Subnets[] | {SubnetId, Name: .Tags[0] | .Value }]'
的工作解决方案,但这取决于标签的顺序(不好)。
我可以使用from_entires
还是减少?
答案 0 :(得分:2)
是的,您可以使用from_entries
。在jq 1.5rc1及更高版本中,它被定义为采用Key
/ Value
个键名以及key
/ value
。
尝试类似:
jq '.Subnets | map({SubnetId} + (.Tags | from_entries))'
在以前的版本中,您可以修改"条目"在将它们传递给from_entries
之前:
jq '.Subnets | map({SubnetId} + (.Tags | map({value: .Value, key: .Key}) | from_entries))'
答案 1 :(得分:1)
这是一个只使用jq原语的解决方案。
[
.Subnets[]
| {SubnetId} + (.Tags[] | if .Key=="Name" then {Name:.Value} else empty end)
]