почему я получаю эту ошибку jq: error Не удается индексировать массив строкой из файла json? - PullRequest
0 голосов
/ 11 ноября 2018

Я пытаюсь создать скрипт, который принимает определенное значение атрибута и сохраняет его в массиве, это следующий файл JSON:

    [
 {
  "id": 1, 
  "name": "myna", 
  "description": "Simple Question", 
  "speaker": "USER", 
 }, 
 {
  "all_Id's": [
   "11111"
  ], 
  "user": "me", 
 }, 
 {
  "id": 2, 
  "name": "mry", 
  "description": "Simple", 
  "speaker": "aaa",
 }
  ]  

как вы видите, объект в файле json не имеет одинаковых атрибутов, поэтому я смотрю только на объект, имеющий атрибут "name", следующий скрипт читает файл Json и возвращает значения только имя атрибута , но я строю что-то неправильно, как theERROR всегда на «{» последнего объекта в файле. Я не знаю почему, что я делаю неправильно?
ожидаемый результат: [myna, mry]

#!/bin/bash
declare -a OB_I=()
declare counter1=0
jq -r '.name' file.json ; while read -r val ; do
  if [[ ! $val ]]
    then
     OB_I[$counter]=$val ;
     counter=$((counter+1));
    fi
  done;
$ printf '%s\n' "${OB_I[@]}"

1 Ответ

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

Ввод jq - это список, в котором нет каких-либо клавиш, не говоря уже о клавише name. Вы хотите

jq -r '.[].name'

вместо.

Не связано, вам не нужна переменная counter. Вы можете просто добавить свой массив с помощью OB_I+=("$val").

...