jq: error: невозможно индексировать массив строкой - PullRequest
0 голосов
/ 12 ноября 2018

Я пытаюсь сделать bash-скрипт для API сервера управления контрольными точками, и у меня возникли некоторые проблемы. Я хочу получить значение в словаре JSON, и для этого я должен использовать переменные. Я ввожу эту команду:

echo $rulebase | jq --arg n "$0" '.rulebase[$n].to'

и я получаю следующую ошибку:

jq: ошибка: невозможно индексировать массив строкой

Однако, если я использую:

echo $rulebase | jq  '.rulebase[0].to'

Я получаю результат, который мне нужен. Я не знаю, как использовать переменные, когда они являются числом, кто-нибудь может мне помочь?

Ответы [ 4 ]

0 голосов
/ 12 ноября 2018

Вам нужно преобразовать строку, которую вы даете своему скрипту, в число .

echo "$rulebase" | jq --arg n "$1" '.rulebase[$n|tonumber].to'
0 голосов
/ 12 ноября 2018

Вам нужно передать числа как аргументы JSON. Здесь

echo "$rulebase" | jq --argjson n "$my_variable" '.rulebase[$n].to'
0 голосов
/ 12 ноября 2018

Если вы хотите передать числовое значение, используйте

—-argjson

вместо —-arg, что для строковых значений JSON.

Если ваш jq не поддерживает —argjson, то сейчас самое подходящее время для обновления, если это возможно;в противном случае вы можете использовать tonumber.

0 голосов
/ 12 ноября 2018

Если у вас есть индекс в $0, просто дайте оболочке вставить его, используя соответствующие кавычки:

echo $rulebase | jq ".rulebase[$0].to"

(это странно, имея номер в $0, который обычноназвание программы).

...