If you have use JavaScript for some time, you should notice that pretty printing JSON in Node.js is as simple as JSON.stringify(obj, null, 2).
(Also, if you need multiline strings, there is js-yaml.)
- But there is never coloring
An alternative is console.log, which in Node.js, it is not as interactive as web browsers with Chrome DevTools, and the depth in by default limited to 2.
- How do you maximize depths?
- Easy, use
console.dir(obj, { depth: null })-- console.dir
- Easy, use
BTW, in my test project, I got this,
Even with proper options ({ depth: null, breakLength: Infinity, compact: false }), I still get this
So, what's the solution?
You can customize inspect by providing your own class.
import util from 'util'
class MultilineString {
// eslint-disable-next-line no-useless-constructor
constructor (public s: string) {}
[util.inspect.custom] (depth: number, options: util.InspectOptionsStylized) {
return [
'',
...this.s.split('\n').map((line) => {
return '\x1b[2m|\x1b[0m ' + options.stylize(line, 'string')
})
].join('\n')
}
}
(BTW, worry about \x1b[2m? It is How to change node.js's console font color?)
And, replace every instance of multiline string with the class.
function cloneAndReplace (obj: any) {
if (obj && typeof obj === 'object') {
if (Array.isArray(obj) && obj.constructor === Array) {
const o = [] as any[]
obj.map((el, i) => {
o[i] = cloneAndReplace(el)
})
return o
} else if (obj.constructor === Object) {
const o = {} as any
Object.entries(obj).map(([k, v]) => {
o[k] = cloneAndReplace(v)
})
return o
}
} else if (typeof obj === 'string') {
if (obj.includes('\n')) {
return new MultilineString(obj)
}
}
return obj
}
export function pp (obj: any, options: util.InspectOptions = {}) {
console.log(util.inspect(cloneAndReplace(obj), {
colors: true,
depth: null,
...options
}))
}
Now the pretty printing function is ready to go.
If you only need the pretty printing function, I have provided it here.
patarapolw
/
prettyprint
prettyprint beyond `JSON.stringify(obj, null, 2)` -- Multiline strings and colors
I also made it accessible via CLI, and possibly other programming languages, such as Python (via JSON / safeEval, actually).



Top comments (1)
Thanks for sharing. That Stack Overflow post with all of the colors listed out is very handy. I don't do a ton of node.js. I use a lot of python in the back end and really like the colorama package.