我有一个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)
为了使用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)
但是,几乎肯定会有更好的方法来实现您的最终目标。