заменить значения переменными - jq - PullRequest
0 голосов
/ 09 октября 2018

Я могу понять, как использовать jq для замены значения из переменной,

$ jq -n --arg name bar '{"name":$name}'

{
  "name": "bar"
}

Но я не уверен, как заменить несколько значений.

{
  ...
  "snstopic": {
    "topic-project1": "team-project1-dev",
    "topci-project2": "team-project2-dev",
    ...  (different json files have different number of sns topics)
  },
 ...
}

Я установилэти переменные среды:

$ export AWS_DEFAULT_REGION=us-east-2
$ export AWS_ACCOUNT_ID=123456789012
$ export ARN_PREFIX="arn:aws:sns:${AWS_DEFAULT_REGION}:${AWS_ACCOUNT_ID}:"

Я хочу получить вывод, как показано ниже

{
  ...
  "snstopic": {
    "topic-project1": "arn:aws:sns:us-east-2:123456789012:team-project1-dev",
    "topci-project2": "arn:aws:sns:us-east-2:123456789012:team-project2-dev",
    ...  (different json files have different number of sns topics
  },
 ...
}

Как добавить его во все соответствующие ключи в .snstopic?

1 Ответ

0 голосов
/ 09 октября 2018

В двух словах: map_values ваш друг.

Предположим, ваш шаблон находится в файле template.json.Затем следующий скрипт выполнит указанное преобразование:

#!/bin/bash
# As far as this example is concerned,
# there is no need to export any variables
AWS_DEFAULT_REGION=us-east-2
AWS_ACCOUNT_ID=123456789012
ARN_PREFIX="arn:aws:sns:${AWS_DEFAULT_REGION}:${AWS_ACCOUNT_ID}:"

jq --arg prefix "$ARN_PREFIX" '
  .snstopic |= map_values($prefix + .)
' template.json

Пример

template.json

{
  "snstopic": {
    "topic-project1": "team-project1-dev",
    "topci-project2": "team-project2-dev"
  }
}

Вывод:

{
  "snstopic": {
    "topic-project1": "arn:aws:sns:us-east-2:123456789012:team-project1-dev",
    "topci-project2": "arn:aws:sns:us-east-2:123456789012:team-project2-dev"
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...