JavaScript data formatting/pretty printer JavaScript data formatting/pretty printer json json

JavaScript data formatting/pretty printer


Use Crockford's JSON.stringify like this:

var myArray = ['e', {pluribus: 'unum'}];var text = JSON.stringify(myArray, null, '\t'); //you can specify a number instead of '\t' and that many spaces will be used for indentation...

Variable text would look like this:

[  "e",   {      "pluribus": "unum"   }]

By the way, this requires nothing more than that JS file - it will work with any library, etc.


I wrote a function to dump a JS object in a readable form, although the output isn't indented, but it shouldn't be too hard to add that: I made this function from one I made for Lua (which is much more complex) which handled this indentation issue.

Here is the "simple" version:

function DumpObject(obj){  var od = new Object;  var result = "";  var len = 0;  for (var property in obj)  {    var value = obj[property];    if (typeof value == 'string')      value = "'" + value + "'";    else if (typeof value == 'object')    {      if (value instanceof Array)      {        value = "[ " + value + " ]";      }      else      {        var ood = DumpObject(value);        value = "{ " + ood.dump + " }";      }    }    result += "'" + property + "' : " + value + ", ";    len++;  }  od.dump = result.replace(/, $/, "");  od.len = len;  return od;}

I will look at improving it a bit.
Note 1: To use it, do od = DumpObject(something) and use od.dump. Convoluted because I wanted the len value too (number of items) for another purpose. It is trivial to make the function return only the string.
Note 2: it doesn't handle loops in references.

EDIT

I made the indented version.

function DumpObjectIndented(obj, indent){  var result = "";  if (indent == null) indent = "";  for (var property in obj)  {    var value = obj[property];    if (typeof value == 'string')      value = "'" + value + "'";    else if (typeof value == 'object')    {      if (value instanceof Array)      {        // Just let JS convert the Array to a string!        value = "[ " + value + " ]";      }      else      {        // Recursive dump        // (replace "  " by "\t" or something else if you prefer)        var od = DumpObjectIndented(value, indent + "  ");        // If you like { on the same line as the key        //value = "{\n" + od + "\n" + indent + "}";        // If you prefer { and } to be aligned        value = "\n" + indent + "{\n" + od + "\n" + indent + "}";      }    }    result += indent + "'" + property + "' : " + value + ",\n";  }  return result.replace(/,\n$/, "");}

Choose your indentation on the line with the recursive call, and you brace style by switching the commented line after this one.

... I see you whipped up your own version, which is good. Visitors will have a choice.


You can use the following

<pre id="dump"></pre><script>   var dump = JSON.stringify(sampleJsonObject, null, 4);    $('#dump').html(dump)</script>