Posts tagged with “jq”

理解 `jq` 中的 `--arg` 和 `--argjson`

在使用 jq 处理 JSON 数据时,我们常常需要从命令行传递变量。jq 提供了两个选项:--arg--argjson,它们用于不同类型的数据。本文介绍这两个选项的区别以及如何正确使用它们。

--arg--argjson

1. 使用 --arg

  • 用途:传递字符串值。

  • 行为:传递的值被视为字符串,并在 jq 输出的结果中加上引号。

  • 示例

    jq -n --arg name "张三" '{ "name": $name }'
    

    输出结果为:

    {
      "name": "张三"
    }
    

2. 使用 --argjson

  • 用途:传递数字、数组或对象等 JSON 值。

  • 行为:传递的值被视为原始 JSON,不会加上引号。

  • 示例

    jq -n --argjson age 30 '{ "age": $age }'
    

    输出结果为:

    {
      "age": 30
    }
    

如何选择

  • 如果值是字符串,使用 --arg
  • 如果值是数字或其他 JSON 类型,使用 --argjson

再来个复杂点的例子

jq -n --arg a "Hello" --argjson b 42 '($a + ($b | tostring))'

在这个例子中,字符串 "Hello" 和数字 42 被拼接成 "Hello42"(带引号的字符串),因为我们将数字转换为字符串后再进行连接。