Skip to content
Charles
Go back

用 jq 格式化剪贴板中的 JSON

Edit page

调试接口或查看日志时,经常会复制一段没有换行的 JSON。手动整理既慢又容易看错,其实可以让 jq 直接完成格式化,再把结果写回剪贴板。

这篇文章参考了 Using jq to format JSON on the clipboard,并整理成 macOS 和 Linux 下可以直接使用的命令。

macOS

macOS 自带 pbpastepbcopy,分别用于读取和写入剪贴板:

pbpaste | jq '.' | pbcopy

为了以后直接使用,可以把它加到 ~/.zshrc

alias jsontidy="pbpaste | jq '.' | pbcopy"

重新打开终端,或者执行:

source ~/.zshrc

之后复制 JSON,运行:

jsontidy

jq '.' 中的 . 表示输出当前 JSON 值。jq 在解析它的同时会默认使用缩进和换行进行 pretty print。

Linux

Linux 可以使用 xclip 读写 X11 剪贴板:

xclip -selection clipboard -o | jq '.' | xclip -selection clipboard

其中:

同样可以配置一个别名:

alias jsontidy="xclip -selection clipboard -o | jq '.' | xclip -selection clipboard"

不要让无效 JSON 清空剪贴板

上面的命令有一个容易忽略的问题:如果剪贴板内容不是合法 JSON,jq 会报错并且不输出结果,但最后的 xclip 仍然会执行。这样原来的剪贴板内容就可能被空内容覆盖。

可以在 jq 失败时重新读取原剪贴板内容:

alias jsontidy="xclip -selection clipboard -o | (jq '.' || xclip -selection clipboard -o) | xclip -selection clipboard"

这条命令的行为是:

  1. 先读取剪贴板;
  2. JSON 合法时,写入 jq 格式化后的结果;
  3. JSON 无效时,重新读取原内容并原样写回。

macOS 也可以使用同样的思路:

alias jsontidy="pbpaste | (jq '.' || pbpaste) | pbcopy"

这样既能快速整理 JSON,也不会因为误复制了普通文本而丢失剪贴板内容。


Edit page
Share this post:

Previous Post
Coding Agent 与 Sandbox 对比
Next Post
Git 一次 Cherry-pick 一段连续提交