JQ - создать массив JSON, используя массив bash с пробелом - PullRequest
0 голосов
/ 04 мая 2020

Мне нужно использовать правильный массив bash для создания массива JQ. Я не могу использовать , для разделения, так как мне нужно использовать правильный массив bash в forloop

Мне нужно создать массив json с использованием массива bash и передать это к --jsonarg.

Это обходной путь, который я использовал для перехода к запросу 1.

group_list=("dummy group 1", "dummy group 2");
jsonarrray=$(echo ${group_list[@]} | jq -R 'split (" ")');

output:
[ "dummy group 1", "dummy group 2" ]

Но мне нужно найти способ использовать правильный массив bash без запятой.

group_list=("dummy group 1" "dummy group 2");
# Cannot use SPLIT because it won't produce separate values
jsonarrray=$(echo ${group_list[@]} | jq -R 'split (" ")');

output: 
[  "dummy group 1 dummy group 2" ]

Вот запрос, который я хочу создать. Запрос 1:

query_data=(jq -n --argjson groupsName "$jsonarrray" \
'{
    jsonrpc: "2.0",
    method: "hostgroup.get",
    params: {
        output: ["name", "groupid"],
        filter: {"name": $groupsName}
    },
    "auth": "6f38cddc44cfbb6c1bd186f9a220b5a0",
    "id": 2
}');

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

{
  "jsonrpc": "2.0",
  "method": "hostgroup.get",
  "params": {
    "output": [
      "name",
      "groupid"
    ],
    "filter": {
      "name": [
        "dummy group 1",
        "dummy group 2"
      ]
    }
  },
  "auth": "6f38cddc44cfbb6c1bd186f9a220b5a0",
  "id": 2
}

1 Ответ

0 голосов
/ 04 мая 2020

Самый простой способ преобразовать массив bash в массив JSON с использованием JQ - использовать параметр --args.

$ jq -n '$ARGS.positional' --args "${group_list[@]}"
[
  "dummy group 1",
  "dummy group 2"
]
...