Prettify and uglify JSONs in Vim
I was working with some JSONs to configure a system and, for reasons, the app did not accept pretty formatted JSON, they had to be compact (or minimized).
So, instead of having this pretty JSON in a file:
{
"user": "L. Skywalker",
"species": "human",
"color": "green"
}
I had to use this ugly and barely readable JSON instead:
{"user":"L. Skywalker","species":"human","color":"green"}
The JSON I needed was way longer with a few nested objects inside, but you got the idea. The problem I had was that one of the nested objects was missing or incomplete and the program crashed on startup.
Modifying the ugly JSON by hand is tedious and error-prone so I ended up
uglifying and prettifying those JSONs many times, in multiple ways. One way is
to pipe the JSON to jq to get it pretty, or to jq -c to get it ugly. Just
pipe everything every time and create a bunch of files.
Or use Vim.
This is my favorite way. One of its many powerful built-in features is to
modify selected text with filters. And the filters can be any command,
including external programs like jq.
This way:
- to prettify a JSON: select the ugly JSON (with
shift + V) and:! jq - to uglify a JSON: select the pretty JSON (with
shift + V) and:! jq -c.
As simple as that.
These magical commands are:
shift + V: switches to Visual Mode linewise, to select lines of the text. See:help visual-modefor details.:switches to Command Line mode, to execute commands. See:help Cmdlinefor details.!: specifies the filter command to use. Vim feeds this command with the selected text and replaces it with the output of the filter command.jq/jq -c: the commands (filters) to modify the selected text.jqprints a pretty JSON, whilejq -cuglifies the JSON into a compact output.