我是jq的新手。我正在尝试编写一个循环遍历JSON文件的简单脚本,在每个对象中获取两个值,并将它们分配给两个可以与curl REST调用一起使用的独立变量。当我回显$ i时,我将这两个值视为输出但是如何将值和addr作为单独的变量?
for i in `cat /Users/egraham/Downloads/test2 | jq .[] | jq ."value,.addr"`; do
答案 0 :(得分:1)
你可以这样做:
jq -rc '.populator.value + " " + .populator.addr' file.json |
while read -r value addr; do
echo do something with "$value" and "$addr"
done
答案 1 :(得分:1)
如果空格或制表符或其他特殊字符使用'read -r'有问题,并且如果你的shell有“readarray”,则可以使用它:
$ readarray -t v < <(jq -rc '.populator | (.value,.addr)' file.json)
这些值将以$ {v [0]}和$ {v [1]}
的形式提供如果有两个以上感兴趣的值,或者值的数量可变或事先未知,则此方法特别有用。
如果你的shell没有readarray
,那么你仍然可以使用面向数组的方法,例如:沿着这条线:
i=-1; while read -r a ; do i=$((i+1)); v[$i]="$a" ; done
答案 2 :(得分:-1)
首先:
for i in cat /Users/egraham/Downloads/test2 | jq .[] | jq .value; do echo $i done
第二
for i in cat /Users/egraham/Downloads/test2 | jq .[] | jq .addr; do echo $i done
如果不单独运行命令,我不知道如何获得它。我不知道AWK,但也许这是值得考虑的事情。