I think all you need to display the data on an HTML page is JSON.stringify
.
For example, if your JSON is stored like this:
var jsonVar = { text: "example", number: 1 };
Then you need only do this to convert it to a string:
var jsonStr = JSON.stringify(jsonVar);
And then you can insert into your HTML directly, for example:
document.body.innerHTML = jsonStr;
Of course you will probably want to replace body
with some other element via getElementById
.
As for the CSS part of your question, you could use RegExp to manipulate the stringified object before you put it into the DOM. For example, this code (also on JSFiddle for demonstration purposes) should take care of indenting of curly braces.
var jsonVar = { text: "example", number: 1, obj: { "more text": "another example" }, obj2: { "yet more text": "yet another example" } }, // THE RAW OBJECT jsonStr = JSON.stringify(jsonVar), // THE OBJECT STRINGIFIED regeStr = '', // A EMPTY STRING TO EVENTUALLY HOLD THE FORMATTED STRINGIFIED OBJECT f = { brace: 0 }; // AN OBJECT FOR TRACKING INCREMENTS/DECREMENTS, // IN PARTICULAR CURLY BRACES (OTHER PROPERTIES COULD BE ADDED) regeStr = jsonStr.replace(/({|}[,]*|[^{}:]+:[^{}:,]*[,{]*)/g, function (m, p1) { var rtnFn = function() { return '<div style="text-indent: ' + (f['brace'] * 20) + 'px;">' + p1 + '</div>'; }, rtnStr = 0; if (p1.lastIndexOf('{') === (p1.length - 1)) { rtnStr = rtnFn(); f['brace'] += 1; } else if (p1.indexOf('}') === 0) { f['brace'] -= 1; rtnStr = rtnFn(); } else { rtnStr = rtnFn(); } return rtnStr; }); document.body.innerHTML += regeStr; // appends the result to the body of the HTML document
This code simply looks for sections of the object within the string and separates them into divs (though you could change the HTML part of that). Every time it encounters a curly brace, however, it increments or decrements the indentation depending on whether it’s an opening brace or a closing (behaviour similar to the space argument of ‘JSON.stringify’). But you could this as a basis for different types of formatting.