Javascript ToString by introspection

by AndreaLigios

HTML

<script src="https://code.jquery.com/jquery-1.12.4.min.js"></script>
<ul id="foo">

</ul>

JavaScript

function isArray(obj){
	return obj!==null && Object.prototype.toString.call( obj ) === '[object Array]';
}

function toString(obj, x){
  if (x===undefined) x=0;  
  if (obj===null) return "NULL";
  var keys = Object.keys(obj);
  var ret = "";
  for (var i = 0; i < keys.length; i++) {
      var val = obj[keys[i]];            
      if (ret!="") {ret+=",";};
      var spacer = new Array(x+1).join( '\t' );
      if (isArray(val)){
      	ret+= "\n" + spacer + "\"" + keys[i] + "\" : [" + toString(val,++x) + "]";
        x--;
      } else if (val !== null && typeof val === 'object') {
      	ret+=  "\n" + spacer + "\"" + keys[i] + "\" : {" + toString(val,++x) + "\n" + spacer + "}";        
        x--;
      } else {      
      	ret += "\n" + spacer + "\"" + keys[i] + "\" : \"" + val + "\"";
      }
  }
  return ret;
}

var markers = {};

markers["header"] = {id: 1, name: "markerHeader", fields : [{id:1,name:"fieldName11"},{id:2,name:"fieldName12"}]};
markers["detail"] = {id: 2, name: "markerDetail", fields : null};
markers["footer"] = {id: 3, name: "markerFooter", fields : null};


//markers["header"].fields[0]["foobar"]="foobaz";


//console.log(toString(markers["header"].fields));


for (var x in markers){
	$("#foo").append("<li>" + toString(markers[x]) + "</li>");
  console.log(toString(markers[x]));
}