How can I pretty-print JSON using JavaScript?
如何以易于阅读(供人类读者使用)的格式显示JSON?我主要在寻找缩进和空白,甚至可能有颜色/字体样式等。
- 可能是我如何以编程方式美化JSON的副本?
- @hippietrail meta.stackoverflow.com/q/251938/3853934
- 如果您只是输出到HTML,那么可以将其包装在一个1</wyn>标记中。</li></ul>[/collapse]</div><hr><P>漂亮的打印是在<wyn>JSON.stringify()</wyn>中本地实现的。第三个参数支持漂亮的打印并设置要使用的间距:</P>[cc lang="javascript"]var str = JSON.stringify(obj, null, 2); // spacing level = 2
如果您需要突出显示语法,可以使用类似这样的regex魔力:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21function syntaxHighlight(json) {
if (typeof json != 'string') {
json = JSON.stringify(json, undefined, 2);
}
json = json.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>');
return json.replace(/("(\\u[a-zA-Z0-9]{4}|\\[^u]|[^\"])*"(\s*:)?|\b(true|false|null)\b|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?)/g, function (match) {
var cls = 'number';
if (/^"/.test(match)) {
if (/:$/.test(match)) {
cls = 'key';
} else {
cls = 'string';
}
} else if (/true|false/.test(match)) {
cls = 'boolean';
} else if (/null/.test(match)) {
cls = 'null';
}
return '<span class="' + cls + '">' + match + '</span>';
});
}请参见此处的实际操作:jspiddle
或以下提供的完整片段:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28function output(inp) {
document.body.appendChild(document.createElement('pre')).innerHTML = inp;
}
function syntaxHighlight(json) {
json = json.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>');
return json.replace(/("(\\u[a-zA-Z0-9]{4}|\\[^u]|[^\"])*"(\s*:)?|\b(true|false|null)\b|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?)/g, function (match) {
var cls = 'number';
if (/^"/.test(match)) {
if (/:$/.test(match)) {
cls = 'key';
} else {
cls = 'string';
}
} else if (/true|false/.test(match)) {
cls = 'boolean';
} else if (/null/.test(match)) {
cls = 'null';
}
return '<span class="' + cls + '">' + match + '</span>';
});
}
var obj = {a:1, 'b':'foo', c:[false,'false',null, 'null', {d:{e:1.3e5,f:'1.3e5'}}]};
var str = JSON.stringify(obj, undefined, 4);
output(str);
output(syntaxHighlight(str));1
2
3
4
5
6pre {outline: 1px solid #ccc; padding: 5px; margin: 5px; }
.string { color: green; }
.number { color: darkorange; }
.boolean { color: blue; }
.null { color: magenta; }
.key { color: red; }- 我只想添加它,而不需要设置类和添加一个CSS文件,而是创建一个样式属性并在JS代码中设置它。使函数真正独立。但总的来说,这绝对是太棒了。
- 超级棒。我添加了一个函数来在新窗口中打开它进行调试:var json=syntaxhighlight(json.stringify(obj,undefined,4););var w=window.open();var html="