【问题标题】:jq returns "Invalid numeric literal" with --argjq 使用 --arg 返回“无效的数字文字”
【发布时间】:2021-01-15 00:09:34
【问题描述】:

以下命令返回错误(jq 版本:1.6):

$ jq --arg b bar . <<< '{ "foo": $b }'
parse error: Invalid numeric literal at line 1, column 12

预期输出:

{
  "foo": "bar"
}

jq 1.6 manual 如此描述了--arg 选项:

  • --arg name value:

此选项通过 jq 程序的值作为预定义变量。如果你运行 jq --arg foo bar,然后$foo 可用 该程序的值为"bar"。注意 value 将被视为字符串,因此 --arg foo 123 将绑定 $foo"123"

命名参数也可用于 jq 程序 $ARGS.named.

我的用法似乎是正确的。这是怎么回事?

【问题讨论】:

    标签: jq


    【解决方案1】:

    我的变量调用不在 jq 程序中

    我传递给jq的这里字符串

    { "foo": $b }
    

    不是手册的--arg 描述中提到的“jq 程序”。唯一的. 是整个程序,并没有使用变量$b

    我试图通过在标准输入上传递我的模式来从头开始构建 JSON。相反,我应该提供 --null-input 选项,并将 . 替换为我试图传入的模式。

    --null-input的描述

    • --null-input/-n:

    根本不读取任何输入!相反,过滤器运行一次 使用null 作为输入。这在使用 jq 时很有用 一个简单的计算器或从头构造 JSON 数据。

    这是正确的调用:

    $ jq --arg b bar --null-input '{ "foo": $b }'
    {
      "foo": "bar"
    }
    

    【讨论】:

      猜你喜欢
      • 2018-08-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-24
      • 2017-06-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多