#!/usr/bin/env node 'use strict'; var traverse = require('traverse'); var obj = ['five', 6, -3, [7, 8, -2, 1], { f: 10, g: -13 }]; var s = ''; traverse(obj).forEach(function toS(node) { if (Array.isArray(node)) { this.before(function () { s += '['; }); this.post(function (child) { if (!child.isLast) { s += ','; } }); this.after(function () { s += ']'; }); } else if (typeof node === 'object') { this.before(function () { s += '{'; }); this.pre(function (x, key) { toS(key); s += ':'; }); this.post(function (child) { if (!child.isLast) { s += ','; } }); this.after(function () { s += '}'; }); } else if (typeof node === 'string') { s += '"' + node.toString().replace(/"/g, '\\"') + '"'; } else if (typeof node === 'function') { s += 'null'; } else { s += node.toString(); } }); console.log('JSON.stringify: ' + JSON.stringify(obj)); console.log('this stringify: ' + s);