为什么我收到此错误jq:错误无法使用json文件中的字符串索引数组?

时间:2018-11-11 20:14:59

标签: bash shell jq

我正在尝试构建具有特定属性值的脚本并将其存储在数组中,这是以下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文件并返回仅属性名称的值< / strong>,但我总是在文件中最后一个对象的“ {”上生成错误,总是出错,我不知道为什么,我做错了什么?
预期的输出是:[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 :(得分:0)

jq的输入是一个列表,没有任何键,更不用说一个名为name的键了。你想要

jq -r '.[].name'

相反。

不相关,您不需要变量counter。您可以简单地使用OB_I+=("$val")追加到数组中。