我有一个Json字符串:
{
"id": 3397,
"title": "title_1"
}
{
"id": 3396,
"title": "title_2"
}
我想要做的是在循环中获取每个id
,
我使用以下代码:
for (( i = 0; i < requestCount; i++ )); do
requestId=$(echo $jsonString[$i] | jq '.id')
echo requestId;
done
但它不起作用,我认为我使用变量的方式是错误的,我在这里找不到任何有用的东西jq。
答案 0 :(得分:1)
让jq进行迭代。 (也就是说,让jq迭代JSON对象的输入流。)例如:
$ jq .id <<< "$json" | while read id ; do echo "hello $id"; done
输出:
hello 3397
hello 3396
这样,您不必知道输入中有多少个JSON对象。您可能希望使用&#34; read -r&#34;或&#34; IFS = read -r&#34;。
替代品是丑陋和低效的,例如:
$ for ((i=0;i<2;i++)) ; do jq -s --argjson i "$i" '.[$i].id' <<< "$json" ; done