Объединить объекты массива json с jq - PullRequest
0 голосов
/ 18 сентября 2018

У меня ниже файл json:

{
"EventId": "60a0490c",
"Resources": [
    {
        "ResourceType": "AWS::STS::AssumedRole", 
        "ResourceName": "AutoScaling"
    }, 
    {
        "ResourceType": "AWS::IAM::Role", 
        "ResourceName": "arn:aws:iam:autoscaling.amazonaws.com/AWSServiceRoleForAutoScaling"
    }
    ]
}

Я хочу объединить пары ключ-значение из элемента Resources и вывести в одну строку как:

60a0490c,AutoScaling=AWS::STS::AssumedRole#AWS::IAM::Role=arn:aws:iam:autoscaling.amazonaws.com/AWSServiceRoleForAutoScaling

Я попробовал этоas:

cat file.json | jq '.EventId + "," + (.Resources[] | join("="))' -r

Это дает мне вывод:

60a0490c,AutoScaling=AWS::STS::AssumedRole
60a0490c,AutoScaling=AWS::IAM::Role=arn:aws:iam:autoscaling.amazonaws.com/AWSServiceRoleForAutoScaling

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

Заранее спасибо.

1 Ответ

0 голосов
/ 18 сентября 2018

Вы можете попробовать это:

jq ' .EventId + "," + ([(.Resources[] | join("="))] | join("#"))' -r file
60a0490c,AWS::STS::AssumedRole=AutoScaling#AWS::IAM::Role=arn:aws:iam:autoscaling.amazonaws.com/AWSServiceRoleForAutoScaling

Чтобы использовать второй join(), просто заключите результат в массив [...].

Обратите внимание, что первый ключ / значение не меняются местами, как показано в вашем примере (т.е. Autoscaling - это значение, а не ключ).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...