我正在尝试为检查点管理服务器api创建bash脚本,但是遇到一些问题。 我想在json字典中获取值,为此我必须使用变量。我输入以下命令:
echo $rulebase | jq --arg n "$0" '.rulebase[$n].to'
然后出现下一个错误:
jq:错误:无法使用字符串索引数组
但是,如果我使用:
echo $rulebase | jq '.rulebase[0].to'
我得到了所需的结果。我不知道变量是数字时如何使用,有人可以帮我吗?
答案 0 :(得分:2)
如果要传递数字值,请使用
—-argjson
代替—-arg
,后者用于JSON字符串值。
如果您的jq不支持-argjson,那么现在将是绝佳的升级时机。否则,您可以使用tonumber
。
答案 1 :(得分:1)
您需要将数字作为JSON参数传递。在这里
echo "$rulebase" | jq --argjson n "$my_variable" '.rulebase[$n].to'
答案 2 :(得分:1)
您需要将提供给脚本的字符串转换为 number 。
echo "$rulebase" | jq --arg n "$1" '.rulebase[$n|tonumber].to'
答案 3 :(得分:0)
如果您在$0
中有索引号,只需让shell使用适当的引号将其插入:
echo $rulebase | jq ".rulebase[$0].to"
(这很奇怪,在$0
中有一个数字,通常是程序名称)。