从aws cli获取单行json

问题描述 投票:0回答:4

我有这个命令:

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'

json amazon-web-services aws-cli
4个回答
11
投票

像这样使用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/


2
投票

jq回答是一个不错的选择。如果您没有

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"))))'

1
投票

如果您使用的是 Windows cmd:

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

0
投票

如果您使用node.js来解析json流,您可以使用:

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 = 'ƒ∆ø';
© www.soinside.com 2019 - 2024. All rights reserved.