有没有一种简单的方法可以在 vim 中反转 json 的漂亮打印?

Is there an easy way to reverse pretty print of json in vim?

当我为机器学习目的标记图像或文本时,我经常以 json 格式导出结果。然后,我可以在 vim 中打开它并使用

简单地打印出来
:execute '%!python -m json.tool'

我经常添加 | w 自动将更改写入文件。

有没有办法逆转这个过程?为了压缩json,所以没有多余的字符?

示例输入:

{
    "name": "John",
    "email": "john@smith.co.uk"
}

期望的输出:

{"name":"John","email":"john@smith.co.uk"}

我会对 Vimish、Pythonish 和 Bashish 解决方案感到满意。

正如评论中提到的chepner,解决方案是使用:

:%!jq -c .

我已经测试过它并且有效。

如果有人想立即保存文件,他们可以添加 | w 来写入更改。

这需要在系统上安装 jq,这是一个非常标准的实用程序。

这也可以在纯 Vim:

中完成
%delete | 0put =json_encode(json_decode(@@))

但请注意,对象内的字段顺序将不会保留。这样就可以得到

{"email":"john@smith.co.uk","name":"John"}