Just for fun...
◀ JSON.stringify([1, 2, 3], function (k, o) { return Array.isArray(o) ? o.toSource() : o; })
▶ ""[1, 2, 3]""
◀ JSON.parse(JSON.stringify([1, 2, 3], function (k, o) { return Array.isArray(o) ? o.toSource() : o; }))
▶ "[1, 2, 3]"
◀ JSON.parse(JSON.stringify({x: 1, y: 2}, function (k, o) { return Array.isArray(o) ? o.toSource() : o; }))
▶ Object { x: 1, y: 2 }
Note: the outer quote marks delimit the string. Inner quote marks aren't escaped because fuck that. Hence the weird string syntax.