从AWS CLI获取单行JSON

时间:2019-05-07 01:46:05

标签: node.js json amazon-web-services aws-cli

我有以下命令:

aws ec2 describe-regions --output=json

输出如下:

{
    "Regions": [
        {
            "Endpoint": "ec2.eu-north-1.amazonaws.com", 
            "RegionName": "eu-north-1"
        }, 
        {
            "Endpoint": "ec2.ap-northeast-2.amazonaws.com", 
            "RegionName": "ap-northeast-2"
        }, 
        {
            "Endpoint": "ec2.us-west-2.amazonaws.com", 
            "RegionName": "us-west-2"
        }
    ]
}

虽然这并不是真正可以在机器上使用的,但我正在单行上寻找输出,如下所示:

{"Regions":[{"Endpoint":"ec2.eu-north-1.amazonaws.com","RegionName":"eu-north-1"},{"Endpoint":"ec2.ap-northeast-2.amazonaws.com","RegionName":"ap-northeast-2"},{"Endpoint":"ec2.us-west-2.amazonaws.com","RegionName":"us-west-2"}]}

aws-cli是否有一些命令可以使我读取机器可读的JSON?像这样:

aws ec2 describe-regions --output='json-for-machines'

4 个答案:

答案 0 :(得分:5)

使用jq像这样压缩它。

aws ec2 describe-regions --output=json| jq -c

输出变为

{"Regions":[{"Endpoint":"ec2.eu-north-1.amazonaws.com","RegionName":"eu-north-1"},{"Endpoint":"ec2.ap-northeast-2.amazonaws.com","RegionName":"ap-northeast-2"},{"Endpoint":"ec2.us-west-2.amazonaws.com","RegionName":"us-west-2"}]}

https://stedolan.github.io/jq/

答案 1 :(得分:2)

jq answer是一个不错的选择。如果您没有jq但有python

aws ec2 describe-regions --output=json | python -c 'import json, sys; json.dump(json.load(sys.stdin), sys.stdout)'

如果您没有jq但有node

aws ec2 describe-regions --output=json | node -e 'console.log(JSON.stringify(JSON.parse(require("fs").readFileSync(0, "utf8"))))'

答案 2 :(得分:1)

如果您使用的是Windows cmd:

aws ec2 describe-regions  --output json | ConvertFrom-Json | ConvertTo-Json -Compress
  • ConvertFrom-Json:将其转换为可管理的对象
  • ConvertTo-Json -Compress:摆脱换行符

答案 3 :(得分:0)

如果您使用node.js解析json-stream,则可以使用:

https://github.com/ORESoftware/json-parser

const k = cp.spawn('bash');

k.stdin.end(`
   aws ec2 describe-instances --output=json --region='us-west-2'; echo '∆';
   aws ec2 describe-instances --output=json --region='us-west-1'; echo '∆';
   aws ec2 describe-instances --output=json --region='us-east-1'; echo '∆';
`);

k.stdout.pipe(new JSONParser({delimiter:'∆'}).on('data', d => {
    // { Reservations: [{}] }
});

只使用一些奇怪的unicode字符定界符,并且应该比使用换行符定界更糟,例如:

const delimiter = 'ƒ∆ø';