Pretty print JSON from command line with NodeJS
Inspired by this protip: Commandline JSON Pretty Print everywhere.
I was pretty sure it can be done in less code in NodeJS since JSON format is native to the language but the "one-liner" I came up with so far looks pretty ugly:
echo '{"hello": 1, "foo": "bar"}' | xargs -0 node -e "console.log(JSON.stringify(JSON.parse(process.argv[1]), null, 2))"
The esoteric goal was to not use any external modules :)
Since NodeJS deals with stdin asynchronously and the stream is paused by default, I figured it's shorter to just use some help from the good ol' xargs to convert stdin to arguments.
Anybody has a better solution? :)
Written by Dmitry Pashkevich
Related protips
2 Responses
It would be nice to do something like this:
echo '{"hello": 1, "foo": "bar"}' | node -e "process.stdin.pipe(console.dir)"
Maybe with streams2
Save this on your PATH. Read the first arg as the file or read stdin. When piping to it, /dev/stdin will look like a file and get and EOF when it's done... assuming your JSON doesn't overrun the memory, it should work.
#!/usr/bin/env node
var args = process.argv.splice( /node$/.test(process.argv[0]) ? 2 : 1 );
console.log(
JSON.stringify(
JSON.parse(
require('fs') .readFileSync(
args.length > 0 ? args[0] : "/dev/stdin"
)
), null, 4)
);Have a fresh tip? Share with Coderwall community!
JavaScript on a page runs with the privileges of that origin. One altered library, tag manager, or snippet can read inputs, change what people see, and call your APIs as the user.
Security insights from Cside