bash l oop ошибка: получить JSON объект по свойству с jq / bash - PullRequest
0 голосов
/ 29 мая 2020

Я хочу получить значения из файла Json. Что работает.

JsonFileToTest:

{
  "permissions": [
    {
      "emailid": "test1@test.com",
      "rights": "read"
    },
    {
      "emailid": "test2@test.com",
      "rights": "read"
    }
  ]
}
readPermissions=($(jq -r '.permissions' JsonFileToTest))

# The command below works perfectly, But when I Put it in a loop, It does not.
#echo ${readPermissions[@]} | jq 'values[].emailid'

for vals in ${readPermissions[@]}
do
   # I would like o extract the email id of the user. The loop is not working atm.  
    echo ${vals[@]} | jq 'values[].emailid'
done

что мне здесь не хватает? спасибо

1 Ответ

2 голосов
/ 29 мая 2020

Если вы действительно хотите сделать это таким образом, это может выглядеть так:

readarray -t permissions < <(jq -c '.permissions[]' JsonFileToTest)
for permissionSet in "${permissions[@]}"; do
  jq -r '.emailid' <<<"$permissionSet"
done

Обратите внимание, что мы говорим jq печатать по одной строке для каждого элемента (с -c) и использование readarray -t для чтения каждой строки в элемент массива (в отличие от антипаттерна array=( $(...command...) ), который разбивается не только на новые строки, но и на другие пробелы, и расширяет глобусы в процессе).


Но нет никакой причины делать что-либо из этого. Вы получите точный тот же результат, просто запустив:

jq -r '.permissions[].emailid' JsonFileToTest
...