循环遍历json数组不起作用-JQ

use*_*726 0 bash jq

我有一个JSON数组conf =

 [ { "fraudThreshold": 4, "fraudTTLSec": 60 }, { "fraudThreshold": 44, "fraudTTLSec": 60 } ]
Run Code Online (Sandbox Code Playgroud)

我想遍历其项目。所以我做了以下工作:

for configy in $(echo "${conf}" | jq -r ".[]"); do 
    echo configy=$configy 
done
Run Code Online (Sandbox Code Playgroud)

结果是:-

configy={
configy="fraudThreshold":
configy=4,
configy="fraudTTLSec":
Run Code Online (Sandbox Code Playgroud)

等等。

它使用空格分割字符串,并一一给出结果。为什么bash表现出这种奇怪的行为?有什么解决办法吗?

另外,当我这样做时,它会给出适当的值:

configy=$(echo $conf | jq .[-1])
echo configy=$configy 
Run Code Online (Sandbox Code Playgroud)

结果:

 configy={ "fraudThreshold": 44, "fraudTTLSec": 60 }
Run Code Online (Sandbox Code Playgroud)

pea*_*eak 5

为了使用bash遍历JSON数组中的项目,您可以编写:

echo "${conf}" | jq -cr ".[]" |
while read -r configy
do
  echo configy="$configy"
done
Run Code Online (Sandbox Code Playgroud)

这样产生:

configy={"fraudThreshold":4,"fraudTTLSec":60}
configy={"fraudThreshold":44,"fraudTTLSec":60}
Run Code Online (Sandbox Code Playgroud)

但是,几乎肯定会有更好的方法来实现您的最终目标。