如何使jq处理参数为数字而不是字符串?

时间:2016-02-12 10:31:11

标签: bash jq

如何使jq将输入参数视为数字而不是字符串?在以下示例中,CURR_INDEX是一个Bash变量,它具有我想要提取的数组索引值。

jq --arg ARG1 $CURR_INDEX '.[$ARG1].patchSets' inputfile.json

我收到以下错误:

jq: error: Cannot index array with string

我尝试了使用bash eval的解决方法,但某些jq过滤器在eval语句中无效。

2 个答案:

答案 0 :(得分:3)

您可以将其转换为to a number,如下所示:

jq --arg ARG1 1 '.[$ARG1|tonumber]' <<< '["foo". "bar"]'
"bar"

答案 1 :(得分:2)

--arg始终将值绑定为字符串。您可以使用--argjson(在1.5版中引入)将参数视为json编码的值。

jq --argjson ARG1 $CURR_INDEX '.[$ARG1].patchSets' inputfile.json

要查看它的实际效果,您可以重现原始错误:

$ jq --argjson ARG1 '"1"' '.[$ARG1]' <<< '["foo", "bar"]'
jq: error (at <stdin>:1): Cannot index array with string "1"

然后纠正它:

$ jq --argjson ARG1 1 '.[$ARG1]' <<< '["foo", "bar"]'
"bar"