jq:错误:无法使用字符串索引数组

时间:2018-11-12 12:00:29

标签: json jq

我正在尝试为检查点管理服务器api创建bash脚本,但是遇到一些问题。 我想在json字典中获取值,为此我必须使用变量。我输入以下命令:

echo $rulebase | jq --arg n "$0" '.rulebase[$n].to'

然后出现下一个错误:

  

jq:错误:无法使用字符串索引数组

但是,如果我使用:

echo $rulebase | jq  '.rulebase[0].to'

我得到了所需的结果。我不知道变量是数字时如何使用,有人可以帮我吗?

4 个答案:

答案 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中有一个数字,通常是程序名称)。