Json 如何使用jq迭代对象数组
我有一个javascript文件,它打印对象的JSON数组:Json 如何使用jq迭代对象数组,json,bash,jq,Json,Bash,Jq,我有一个javascript文件,它打印对象的JSON数组: //myfile.js输出 [ {“id”:1,“name”:“blah blah”,…}, {“id”:2,“name”:“xxx”,…}, ... ] 在我的bash脚本中,我希望遍历每个对象 我试过跟随,但不起作用 #/bin/bash 输出=$(myfile.js) 对于$(echo${output}jq-c'.[])中的行;做 echo$行 完成 您正试图将myfile.js作为命令调用。你需要这个: output=$(c
//myfile.js输出
[
{“id”:1,“name”:“blah blah”,…},
{“id”:2,“name”:“xxx”,…},
...
]
在我的bash脚本中,我希望遍历每个对象
我试过跟随,但不起作用
#/bin/bash
输出=$(myfile.js)
对于$(echo${output}jq-c'.[])中的行;做
echo$行
完成
您正试图将myfile.js
作为命令调用。你需要这个:
output=$(cat myfile.js)
与此相反:
output=$(myfile.js)
但即使如此,如果数据中有空格,您当前的方法也不会很好地工作(根据您发布的示例,它确实有空格)。我建议采取以下备选方案:
jq -c '.[]' < myfile.js |
while read -r row
do
echo "$row"
done
编辑:
如果您的数据来自上一个流程调用,例如您的案例中的mongo
,您可以将其直接通过管道传输到jq
(以保持可移植性),如下所示:
mongo myfile.js |
jq -c '.[]' |
while read -r row
do
echo "$row"
done
我如何使jq-c“[]”<(mongomyfile.js)工作
在bash shell中,您可以沿以下行编写表达式:
while read -r line ; do .... done < <(mongo myfile.js | jq -c .[])
然后,
…
中任何变量的绑定都将丢失。在迭代每个项目时,您希望存档什么?我相信大部分内容都可以在一次调用中归档jq
对不起,我觉得我写的文章很混乱。javascript文件在mongo shell中执行,因此,这就是我将输出存储在变量中的原因。output=$(mongo myfile.js)。如何使jq-c“[]”<(mongo myfile.js)工作?您只需要将该输出直接传送到jq
,请参阅更新的示例。
while read -r line ; do .... done < <(mongo myfile.js | jq -c .[])
... | while read -r line ; do .... done