如何使 jq 将参数视为数字而不是字符串?
How to make jq treat argument as numeric instead of string?
如何使 jq
将输入参数视为数字而不是字符串?在下面的示例中,CURR_INDEX
是一个 Bash 变量,它具有我要提取的数组索引值。
jq --arg ARG1 $CURR_INDEX '.[$ARG1].patchSets' inputfile.json
我收到以下错误:
jq: error: Cannot index array with string
我尝试了使用 bash
eval
的解决方法,但某些 jq
过滤器在 eval
语句中无法正常工作。
你可以转换它to a number,像这样:
jq --arg ARG1 1 '.[$ARG1|tonumber]' <<< '["foo". "bar"]'
"bar"
--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"
如何使 jq
将输入参数视为数字而不是字符串?在下面的示例中,CURR_INDEX
是一个 Bash 变量,它具有我要提取的数组索引值。
jq --arg ARG1 $CURR_INDEX '.[$ARG1].patchSets' inputfile.json
我收到以下错误:
jq: error: Cannot index array with string
我尝试了使用 bash
eval
的解决方法,但某些 jq
过滤器在 eval
语句中无法正常工作。
你可以转换它to a number,像这样:
jq --arg ARG1 1 '.[$ARG1|tonumber]' <<< '["foo". "bar"]'
"bar"
--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"