我认为在 HTML 页面上显示数据所需的只是JSON.stringify
.
例如,如果您的 JSON 是这样存储的:
var jsonVar = {
text: "example",
number: 1
};
然后您只需执行此操作即可将其转换为字符串:
var jsonStr = JSON.stringify(jsonVar);
然后你可以直接插入到你的 HTML 中,例如:
document.body.innerHTML = jsonStr;
当然,您可能希望body
通过getElementById
.
至于您问题的 CSS 部分,您可以使用 RegExp 在将字符串化对象放入 DOM 之前对其进行操作。例如,这段代码(出于演示目的也在 JSFiddle 上)应该注意花括号的缩进。
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
此代码只是在字符串中查找对象的各个部分并将它们分隔为 div(尽管您可以更改其中的 HTML 部分)。但是,每次遇到花括号时,它都会根据它是左大括号还是右大括号来增加或减少缩进(行为类似于'JSON.stringify'的空格参数)。但是您可以将其作为不同类型格式的基础。