Reputation: 3990
How to output an object as a readable string with formatting (structured like with <pre>
) ?
No jQuery possible.
My object looks like this using console.log
.
Object
title: "Another sting"
type: "tree"
options: Object
paging: "20"
structuretype: "1"
columns: Object
...
description: "This is a string"
...
What is the best to convert it to a structured string?
My attempt:
I tried using stringify()
to get the JSON structure. I could then write my own parser, but maybe there are already any implementations?
Upvotes: 8
Views: 16137
Reputation: 3990
In the meantime I came up with this function, maybe someone can use it:
addIndent: function(nSpaces) {
var strOutput = '';
for(var i = 0; i < nSpaces; i++) {
strOutput += '--';
}
return strOutput;
}
parseObjToStr: function(oObject, nLevel) {
var that = this;
var strOutput = '';
nLevel = nLevel || 0;
for(var oEl in oObject) {
if(typeof oObject[oEl] === 'object' || Object.prototype.toString.call( oObject[oEl] ) === '[object Array]')
{
strOutput += that.addIndent(nLevel) + oEl + "<br />";
strOutput += that.parseObjToStr( oObject[oEl], nLevel+1);
}
else
{
strOutput += that.addIndent(nLevel) + oEl + " = " + oObject[oEl] + "<br />";
}
}
return strOutput;
}
Upvotes: 0
Reputation: 5640
JSON.stringify
includes a formatting argument:
JSON.stringify(value[, replacer [, space]])
The space argument may be used to control spacing in the final string. If it is a number, successive levels in the stringification will each be indented by this many space characters (up to 10). If it is a string, successive levels will indented by this string (or the first ten characters of it).
Using a tab character mimics standard pretty-print appearance
https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/JSON/stringify
Is that enough formatting for what you need? E.g. try:
JSON.stringify( object, null, 2 );
Otherwise, http://code.google.com/p/google-code-prettify/ is a standalone JSON to HTML pretty printer. Used by stackoverflow and google code, I believe.
Upvotes: 18