繁体   English   中英

如何解析存储在shell变量中的json值

[英]How to parse json values stored in shell variable

#!/bin/bash 

DESCRIBE_VPC=$(aws ec2 describe-vpcs --region us-west-2)

aws ec2 describe-vpcs --region us-west-2检索的 Json 值存储在DESCRIBE_VPC中,其输出格式如下。

> echo $DESCRIBE_VPC

{
    "Vpcs": [
        {
            "VpcId": "vpc-12345678910",
            "InstanceTenancy": "default",
            "Tags": [
                {
                    "Value": "arn:aws:cloudformation:us-west-2:12345678910:stack/vpc/0123456-vpcid",
                    "Key": "stack-id"
                },
                {
                    "Value": "vpc-type",
                    "Key": "Name"
                },
            ],
            "CidrBlockAssociationSet": [
                {
                    "AssociationId": "vpc-cidr-123456",
                    "CidrBlock": "123.456.89.10",
                    "CidrBlockState": {
                        "State": "associated"
                    }
                }
            ],
            "State": "available",
            "DhcpOptionsId": "dpt-01234567",
            "OwnerId": "12345678910",
            "CidrBlock": "123.456.789.10",
            "IsDefault": false
        }
    ]
}

[root@ip bin]# jq '.Vpcs' $DESCRIBE_VPC

jq: error: Could not open file {: No such file or directory
jq: error: Could not open file "Vpcs":: No such file or directory
parse error: Invalid numeric literal at line 1, column 57

这里有什么建议如何解析存储在变量中的 json 值?

实际上,您必须使用 shell 变量的 (json) 内容代替命令的 (jq) 输入。 这个输入应该是一个文件或一个流,但你把它放在一个 shell 变量中。 有很多方法可以做到这一点,这是一个简单的方法:

echo "$DESCRIBE_VPC" | jq '.Vpcs'

或者

printf "%s" "$DESCRIBE_VPC" | jq '.Vpcs'

或者这个(对于 bash shell):

jq '.Vpcs' <<< "$DESCRIBE_VPC"

jq 也可以接受变量和 json 变量。 例如你可以这样做:

jq -n --argjson x "$DESCRIBE_VPC" '$x.Vpcs'

但第一个通常更好。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM