0
#!/bin/bash 

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

The Json value retrieved from aws ec2 describe-vpcs --region us-west-2 stores in DESCRIBE_VPC which comes to the output format below.

> 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

Any suggestions here how to parse the json values stored in variable?

1 Answer 1

1

Actually you have to use the (json) content of a shell variable in place of a command's (jq) input. This input should be a file or a stream, but you have it in a shell variable. There are many ways to do this, this is a simple one:

echo "$DESCRIBE_VPC" | jq '.Vpcs'

or

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

or this (for bash shell):

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

Also jq can accept variables and json variables. For example you could do this:

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

But the first one is usually better.

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.