我正在尝试构建具有特定属性值的脚本并将其存储在数组中,这是以下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[@]}"
答案 0 :(得分:0)
jq
的输入是一个列表,没有任何键,更不用说一个名为name
的键了。你想要
jq -r '.[].name'
相反。
不相关,您不需要变量counter
。您可以简单地使用OB_I+=("$val")
追加到数组中。