Получить однострочный JSON от AWS Cli - PullRequest
4 голосов
/ 07 мая 2019

У меня есть эта команда:

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 ]

5 голосов
/ 07 мая 2019

Используйте 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 голосов
/ 07 мая 2019

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"))))'
1 голос
/ 07 мая 2019

, если вы используете Windows cmd:

aws ec2 describe-regions  --output json | ConvertFrom-Json | ConvertTo-Json -Compress
  • ConvertFrom-Json: преобразовывает его в управляемый объект
  • ConvertTo-Json -Compress: избавляется от новых строк
0 голосов
/ 07 мая 2019

Если вы используете 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: [{}] }
});

просто используйте какой-нибудь странный разделитель символов в юникоде, и он должен быть не хуже, чем использование новых строк для разграничения, например:

const delimiter = 'ƒ∆ø';
...