Создать вложенный JSON из содержимого файла, используя jq - PullRequest
1 голос
/ 18 марта 2020

У меня есть файл с содержанием json ниже и переменная оболочки с некоторыми ключами. Я хочу создать вложенный JSON, используя все ключи. Например:

file.json:
{
    "name":"..",
    "value":".."
}

переменная оболочки, которая содержит список значений:

values = ('one' 'two' 'three')

Я хочу создать переменную, как показано ниже:

{
   "all":{
        "one":  {
            "name":"..",
            "value":".."
        },
        "two":  {
            "name":"..",
            "value":".."
        },
        "three":  {
            "name":"..",
            "value":".."
        }
   }
}

Я пытался передать значения --arg в jq, но это не сработало. JQ версия: 1,5

1 Ответ

2 голосов
/ 18 марта 2020

Более новые версии JQ заполняют внутренний массив ($ARGS.positional) аргументами, указанными после --args в командной строке, вы можете использовать его.

jq '{all: [{($ARGS.positional[]): .}] | add}' file --args "${values[@]}"

В более старых версиях вы можете использовать это подход:

printf '"%s"\n' "${values[@]}" |
    jq '{all: [{(inputs): .}] | add}' file -

Но учтите, что это не так надежно, как приведенный выше, я настоятельно рекомендую обновить JQ.

...