如何使用 jq 独立打印 json?

k0p*_*kus 80 json text-formatting jq

目前,当我想使用jq漂亮地打印一个 json 文件时,我使用:

cat file.json | jq .
Run Code Online (Sandbox Code Playgroud)

但是我希望jq接受一个文件名作为参数而不必回退到cat.

手册页说:

jq [选项...] 过滤器 [文件...]

... 默认情况下,jq 从 stdin 读取 JSON 对象流(空格分隔)。可以指定一个或多个文件,在这种情况下 jq 将从这些文件中读取输入。

仍在运行:

jq file.json
Run Code Online (Sandbox Code Playgroud)

通过抛出未定义键的编译错误而失败。

运行时我应该如何添加文件jq

k0p*_*kus 127

jq . file.json
Run Code Online (Sandbox Code Playgroud)

是我一直在寻找的。我没有意识到这.是一个过滤器而不是管道内容的占位符:

.

绝对最简单(也是最不有趣)的过滤器是.. 这是一个过滤器,它接受其输入并将其作为输出产生。

手册页清楚地表明过滤器是必需的参数。

  • 要就地修改文件,请使用 `jq 。文件.json | Sponge file.json`(这需要 `moreutils` 中的 `sponge`) (10认同)
  • 此命令也适用于管道:`<cmd_production_json_to_std_out> | jq.` (6认同)
  • @SteveAnderson - 如果一个进程打开一个文件,逐行处理它,并输出每一行,那么输出管道将破坏该文件,可能在使用时。有时这很好,但为了 100% 确定没问题,请使用具有缓冲作用的海绵。 (5认同)
  • 这与 `jq 有何不同?文件.json > 文件.json`? (2认同)