从JSON对象中提取2个值,并使用jq和bash在循环中用作变量

时间:2017-01-31 19:57:51

标签: json bash loops jq

我是jq的新手。我正在尝试编写一个循环遍历JSON文件的简单脚本,在每个对象中获取两个值,并将它们分配给两个可以与curl REST调用一起使用的独立变量。当我回显$ i时,我将这两个值视为输出但是如何将值和addr作为单独的变量?

for i in `cat /Users/egraham/Downloads/test2  | jq .[] | jq ."value,.addr"`; do

3 个答案:

答案 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,但也许这是值得考虑的事情。