调用 jq
jq 过滤器在 JSON 数据流上运行。jq 的输入被解析为一系列空格分隔的 JSON 值,这些值逐个传递给提供的过滤器。过滤器的输出写入标准输出,作为一系列换行符分隔的 JSON 数据。
最简单和最常见的过滤器(或 jq 程序)是.,它是身份运算符,将 jq 处理器的输入复制到输出流。由于 jq 处理器的默认行为是从输入流读取 JSON 文本并美化输出,因此.程序的主要用途是验证和美化输入。jq 编程语言非常丰富,允许做的不只是验证和美化。
注意:注意 shell 的引号规则很重要。一般来说,最好始终用单引号(在 Unix shell 上)引号 jq 程序,因为太多对 jq 有特殊意义的字符也是 shell 元字符。例如,jq
"foo"在大多数 Unix shell 上都会失败,因为那将等同于jq foo,这通常会失败,因为foo is not
defined。当使用 Windows 命令 shell (cmd.exe) 时,最好在命令行上用双引号包围你的 jq 程序(而不是-f program-file选项),但然后 jq 程序中的双引号需要转义。当使用 Powershell (powershell.exe) 或 Powershell Core (pwsh/pwsh.exe) 时,用单引号包围 jq 程序,并在 jq 程序内部使用转义的双引号 (\")。
Unix shell:jq '.["foo"]'
Powershell:jq '.[\"foo\"]'
Windows 命令 shell:jq ".[\"foo\"]"
注意:jq 允许用户定义函数,但每个 jq 程序都必须有一个顶层表达式。
你可以使用一些命令行选项来影响 jq 的读取和写入输入和输出:
--null-input / -n:
不要读取任何输入。相反,使用null作为输入运行过滤器一次。这在将 jq 用作简单计算器或从零开始构建 JSON 数据时很有用。
--raw-input / -R:
不要将输入解析为 JSON。相反,将文本的每一行作为字符串传递给过滤器。如果与--slurp结合使用,则整个输入将作为单个长字符串传递给过滤器。
--slurp / -s:
不是为输入中的每个 JSON 对象运行过滤器,而是将整个输入流读取到一个大数组中,只运行过滤器一次。
--compact-output / -c:
默认情况下,jq 美化输出 JSON。使用此选项将产生更紧凑的输出,通过将每个 JSON 对象放在单行上。
--raw-output / -r:
使用此选项,如果过滤器的结果是字符串,则它将直接写入标准输出,而不是格式化为带引号的 JSON 字符串。这可以用于使 jq 过滤器与非 JSON 基于的系统进行通信。
--raw-output0:
. Like-r但 jq 将在每个输出后打印 NUL 而不是换行符。这在输出的值可以包含换行符时很有用。当输出值包含 NUL 时,jq 将以非零代码退出。
--join-output / -j:
. Like-r但 jq 不会在每个输出后打印换行符。
--ascii-output / -a:
jq 通常以 UTF-8 输出非 ASCII Unicode 码点,即使输入指定它们为转义序列(如
--sort-keys / -S:
以排序的顺序输出每个对象的字段键。
--color-output / -C和--monochrome-output / -M:
默认情况下,如果写入终端,jq 会输出彩色 JSON。你可以使用-C强制它在管道或文件写入时产生颜色,并使用-M禁用颜色。NO_COLOR环境变量不为空时,jq 默认禁用彩色输出,但你可以通过-C.
启用它。JQ_COLORS环境变量配置(见下文)。
--tab:
使用制表符而不是两个空格来表示每个缩进级别。
--indent n:
使用给定的空格数(不超过 7)进行缩进。
--unbuffered:
在打印每个 JSON 对象后刷新输出(如果你正在将慢速数据源管道到 jq,并将 jq 的输出管道到其他地方,这很有用)。
--stream:
以流式方式解析输入,输出路径和叶值(标量和空数组或空对象)的数组。"a"成为[[],"a"],和[[],"a",["b"]]成为[[0],[]], [[1],"a"],和[[2,0],"b"].
这对于处理非常大的输入很有用。与过滤和reduce和foreach语法一起使用时,可以逐步减少大型输入。
--stream-errors:
. Like--stream,但无效的 JSON 输入会产生包含第一个元素为错误、第二个元素为路径的数组值。["a",n]将字符串除以另一个字符串会使用第二个字符串作为分隔符分割第一个字符串。["Invalid literal at line 1,
column 7",[1]].
暗示--stream。无效的 JSON 输入在--stream没有--stream-errors.
--seq:
时不会产生错误值。application/json-seqMIME 类型方案用于分隔 jq 输入和输出中的 JSON 文本。这意味着在每个值输出之前打印 ASCII RS(记录分隔符)字符,并在每个输出之后打印 ASCII LF(换行符)。无法解析的输入 JSON 文本被忽略(但会发出警告),丢弃所有后续输入,直到下一个 RS。此模式还会解析 jq 的输出,而无需--seq选项。
-f filename / --from-file filename:
从文件而不是从命令行读取过滤器,类似于 awk 的 -f 选项。你也可以使用 '#' 来添加注释。
-L directory:
将directory添加到模块搜索列表。如果使用此选项,则不会使用内置搜索列表。有关模块的说明,请参阅下文。
--arg name value:
此选项将值传递给 jq 程序作为预定义变量。如果你使用--arg foo bar,然后$foo在程序中可用,其值为"bar"。请注意,value将被视为字符串,因此--arg foo 123将绑定$foo到"123".
命名参数也作为$ARGS.named.
--argjson name JSON-text:
传递给 jq 程序。--argjson foo 123,然后$foo在程序中可用,其值为123.
--slurpfile variable-name filename:
此选项读取指定文件中的所有 JSON 文本,并将解析的 JSON 值数组绑定到给定的全局变量。如果你使用--slurpfile foo bar,然后$foo在程序中可用,其包含对应于文件bar.
--rawfile variable-name filename:
中文本的元素数组。--rawfile foo bar,然后$foo在程序中可用,其包含文件bar.
--args:
中文本的内容。$ARGS.positional[].
--jsonargs:
传递给 jq 程序。$ARGS.positional[].
--exit-status / -e:
传递给 jq 程序。false也不是null, 1 if the last output value was
either false或null, or 4 if no valid result was ever
produced. Normally jq exits with 2 if there was any usage
problem or system error, 3 if there was a jq program compile
error, or 0 if the jq program ran.
另一种设置退出状态的方法是使用halt_error内建函数。
--binary / -b:
Windows 用户使用 WSL、MSYS2 或 Cygwin,在使用原生 jq.exe 时应使用此选项,否则 jq 将将换行符(LFs)转换为回车符后跟换行符(CRLF)。
--version / -V:
输出 jq 版本并退出,状态码为 0。
--build-configuration:
输出 jq 的构建配置并退出,状态码为 0。此输出没有支持的格式或结构,未来版本中可能会发生变化而无需通知。
--help / -h:
输出 jq 帮助并退出,状态码为 0。
--:
终止参数处理。剩余参数是位置的,可以是字符串、JSON 文本或输入文件名,具体取决于是否给出了--args或--jsonargs。
--run-tests [filename]:
运行给定文件或标准输入中的测试。这必须是给出的最后一个选项,并且不尊重所有前面的选项。输入由注释行、空行和程序行后跟一行输入行组成,然后是预期输出行(每行一个输出)和终止空行。编译失败测试以只包含%%FAIL的行为开始,然后是包含要编译的程序行,然后是包含要与之比较的错误消息的行。
警告:此选项可能会向后不兼容地改变。