jsonpretty()

by Laurens Maneschijn

HTML

Very basic jsonpretty() string formatter, only adds indentation.
<hr>

JavaScript

var o = {b:null,a:1,c:{x:1,y:2,z:{a:[1,2,3]}},d:'hello\n\t\\there',1:1};

function log(x) {
  console.log(x);
  document.body.innerHTML += '<hr><pre>' + x + '</pre>';
}
log(JSON.stringify(o));
log(jsonpretty(JSON.stringify(o)));
log(o.d);

function jsonpretty(s) {
    if (typeof s !== 'string') {
        s = JSON.stringify(s);
    }
    var i = 0;
    var in_string = false;
    var indent = '\t';
    var indent_n = 0;
    var o = '';
    var c;
    for (i = 0; i < s.length; i++) {
        c = s[i];
        if (in_string) {
            if (c === '"') {
                o += c;
                in_string = false;
            } else if (c === '\\') {
                // if in string, also insert next char and move pointer by 1, safely skipping next char without sideeffects:
                o += c;
                i++;
                o += s[i];
            } else {
                o += c;
            }
        } else {
            if (c === '"') {
                o += c;
                in_string = true;
            } else if (c === '{' || c === '[') {
                o += c;
                indent_n++;
                o += '\n' + indent.repeat(indent_n);
            } else if (c === '}' || c === ']') {
                indent_n--;
                o += '\n' + indent.repeat(indent_n);
                o += c;
            } else if (c === ',') {
                o += c;
                o += '\n' + indent.repeat(indent_n);
            } else {
                o += c;
            }
        }
    }
    return o;
}