【问题标题】:How to make jq treat argument as numeric instead of string?如何让 jq 将参数视为数字而不是字符串?
【发布时间】:2016-02-12 10:31:10
【问题描述】:

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

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

我收到以下错误:

jq: error: Cannot index array with string

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

【问题讨论】:

    标签: bash jq


    【解决方案1】:

    你可以转换成to a number,像这样:

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

    【讨论】:

      【解决方案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"
      

      【讨论】:

        猜你喜欢
        • 2021-07-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-10-15
        • 2011-08-25
        • 2016-05-23
        • 1970-01-01
        相关资源
        最近更新 更多