使用 jq 转换对象的嵌套数组

eba*_*axt 3 json jq

如何转换 JSON 输入

{
"Subnets": [
    {
        "VpcId": "vpc-xxx",
        "Tags": [
            {
                "Value": "staging_subnet_private_a",
                "Key": "Name"
            }
        ],
        "SubnetId": "subnet-xxx"
    },
    ...
    ]
}
Run Code Online (Sandbox Code Playgroud)

[
 {
  "SubnetId": "subnet-xxx",
  "Name": "staging_subnet_private_a"
 },
 ...
]
Run Code Online (Sandbox Code Playgroud)

使用jq

我有一个使用的工作解决方案jq '[.Subnets[] | {SubnetId, Name: .Tags[0] | .Value }]',但这依赖于标签的顺序(不好)。

我可以使用from_entires或减少吗?

小智 5

是的,你可以使用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))'