如何将整数作为 jq 中的参数?
How can I put integer as an argument in jq?
我一直在尝试使用 jq 来解析从 aws cli 返回的 json 文件,但我遇到了使用索引号引用数组的问题。我需要这样做是因为我想以特定格式导出描述安全组的文本文件,包括所有入站和出站规则。
for (( i=1; i<=groupCount; i++ )) ;
do
echo $i
echo $(echo "$input" | jq --arg i $i '.SecurityGroups[$i]')
done
这returns一个错误:
1
jq: error (at <stdin>:189): Cannot index array with string "1"
2
jq: error (at <stdin>:189): Cannot index array with string "2"
3
jq: error (at <stdin>:189): Cannot index array with string "3"
有什么解决办法吗?
您必须使用命令行参数 --argjson
或 fromjson
过滤器将参数转换为数字。数组只能由整数索引,使用 --arg
将输入保持为字符串。
$ jq --argjson i "$i" '.SecurityGroups[$i]'
$ jq --arg i "$i" '.SecurityGroups[$i|fromjson]'
我一直在尝试使用 jq 来解析从 aws cli 返回的 json 文件,但我遇到了使用索引号引用数组的问题。我需要这样做是因为我想以特定格式导出描述安全组的文本文件,包括所有入站和出站规则。
for (( i=1; i<=groupCount; i++ )) ;
do
echo $i
echo $(echo "$input" | jq --arg i $i '.SecurityGroups[$i]')
done
这returns一个错误:
1
jq: error (at <stdin>:189): Cannot index array with string "1"
2
jq: error (at <stdin>:189): Cannot index array with string "2"
3
jq: error (at <stdin>:189): Cannot index array with string "3"
有什么解决办法吗?
您必须使用命令行参数 --argjson
或 fromjson
过滤器将参数转换为数字。数组只能由整数索引,使用 --arg
将输入保持为字符串。
$ jq --argjson i "$i" '.SecurityGroups[$i]'
$ jq --arg i "$i" '.SecurityGroups[$i|fromjson]'