Как передать аргумент в качестве индекса в JQ? - PullRequest
0 голосов
/ 02 октября 2018

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

$ echo '[  { "CT" : "OS1"  , "VERSION" : "3" } , { "CT" : "OS2"  , "VERSION" : "3" } ]'  | jq '.[1]'
{
  "CT": "OS2",
  "VERSION": "3"
}

Однако я хотел бы использовать переменную (из среды в будущем), заменяющую индекс '1'в приведенной выше команде, но это приводит к ошибке.

echo '[  { "CT" : "OS1"  , "VERSION" : "3" } , { "CT" : "OS2"  , "VERSION" : "3" } ]'  | jq --arg index 1 '.[$index]'
jq: error (at <stdin>:1): Cannot index array with string "1"

Похоже, что он не может проанализировать это 1 как числовое значение, как только разрешено, как это.Кто-нибудь может мне помочь?

Ответы [ 2 ]

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

Вы можете использовать --argjson параметр:

jq --argjson index 1 '.[$index]'

Как указано в jq --help:

--argjson a v установить переменную $a в JSON значение <v>;

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

Если у вас jq 1.4 или старше, вы можете использовать функцию tonumber:

jq --arg index 1 '.[$index | tonumber]'

Для получения более свежих версий см. ответ Олив .

...