我如何在jq中使用变量?(MacOS,shell)

时间:2016-10-25 14:20:33

标签: json bash shell jq

我有一个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

1 个答案:

答案 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