我试图从一个字符串中提取几个子字符串,我想将这些子字符串保存在一个数组中,所以我想到了使用循环,但是我真的是bash脚本的新手。
原始字符串如下所示:
{
"groups":[
{
"group":"",
"favourites":[
{
"category":"",
"longitude":1.0812308,
"latitude":49.4304904,
"test":"",
"color":0,
"name":"Place Henri Gadeau de Kerville, Centre Ville Rive Gauche"
},
{
"category":"",
"longitude":1.940849,
"latitude":48.57248,
"test":"",
"color":0,
"name":"Rue Charles de Gaulle, Saint-Arnoult-en-Yvelines"
},
{
"category":"",
"longitude":1.9358053,
"latitude":48.570592,
"test":"",
"color":0,
"name":"Rue des Remparts, Saint-Arnoult-en-Yvelines"
},
{
"category":"",
"longitude":1.0856655,
"latitude":49.4291327,
"test":"",
"color":0,
"name":"Rue Marie Duboccage (Saint-Sever), Rouen"
},
{
"category":"",
"longitude":1.0845655,
"latitude":49.4251747,
"test":"",
"color":0,
"name":"Rue Octave Crutel, Rouen"
}
],
"color":0
}
]
}
所需的输出是一个数组,该数组的URL模式是“ name”标签中的url模式,例如:
Array[0]=Place%20Henri%20Gadeau%20de%20Kerville%2C%20Centre%20Ville%20Rive%20Gauche;
Array[1]=Rue%20Charles%20de%20Gaulle%2C%20Saint-Arnoult-en-Yvelines;
Array[2]=Rue%20des%20Remparts%2C%20Saint-Arnoult-en-Yvelines;
Array[3]=Rue%20Marie%20Duboccage%20(Saint-Sever)%2C%20Rouen;
Array[4]=Rue%20Octave%20Crutel%2C%20Rouen;
...
为了将Array的值保存在另一个文件中,然后使用它们。我尝试过grep
grep -o '^\"name\":.*\},$' $var
但我无法取得好的结果。
在bash
一个简单的循环中,使用JSON
解析工具jq
和流程替换
#!/bin/bash
jsonArray=()
while IFS= read -r line
do
jsonString="${line// /%20}" # Replace blank-spaces with '%20'
jsonString="${jsonString//,/%2C}" # Replace ',' with empty '%2C'
jsonString+=";" # Append a ';' at end of string
jsonArray+=("$jsonString") # Add it to the array
done< <(jq -r '.groups[].favourites[].name' newfile)
printf "%s\n" "${jsonArray[@]}" # "${jsonArray[0]}","${jsonArray[1]}"...
在我的示例中,我在文件中使用了字符串,对于您的情况,请替换行
done< <(jq -r '.groups[].favourites[].name' newfile)
实际命令产生的JSON
输出为
done < <( json-cmd | jq -r '.groups[].favourites[].name')
在运行脚本时
$ bash script.sh
Place%20Henri%20Gadeau%20de%20Kerville%2C%20Centre%20Ville%20Rive%20Gauche;
Rue%20Charles%20de%20Gaulle%2C%20Saint-Arnoult-en-Yvelines;
Rue%20des%20Remparts%2C%20Saint-Arnoult-en-Yvelines;
Rue%20Marie%20Duboccage%20(Saint-Sever)%2C%20Rouen;
Rue%20Octave%20Crutel%2C%20Rouen;
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句