Javascript 格式化输出JSON

阅读(13274)

将 json 数据以美观的缩进格式显示出来,借助最简单的 JSON.stringify 函数就可以了,因为此函数还有不常用的后面2个参数。

见MDN https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify 的描述。

JSON.stringify(value[, replacer [, space]])

value
将要序列化成 JSON 字符串的值。

replacer 可选
如果该参数是一个函数,则在序列化过程中,被序列化的值的每个属性都会经过该函数的转换和处理;如果该参数是一个数组,则只有包含在这个数组中的属性名才会被序列化到最终的 JSON 字符串中。关于该参数更详细的解释和示例,请参考使用原生的 JSON 对象一文。

space 可选
指定缩进用的空白字符串,用于美化输出(pretty-print)。

示例代码如下:


<!DOCTYPE html>
<html>
<head>
<title>json 打印</title>
<style type='text/css'>
pre {outline: 1px solid #ccc; padding: 5px; margin: 5px; }
.string { color: green; }
.number { color: darkorange; }
.boolean { color: blue; }
.null { color: magenta; }
.key { color: red; }
</style>
</head>
<body>
<pre id="output"></pre>
<pre id="output2"></pre>

<script type="text/javascript">
var obj = {a:1, 'b':'foo', c:[false,null, {d:{e:1.3e5}}]};

// 1. 最简单的输出
var str = JSON.stringify(obj, undefined, 2);
document.getElementById('output').innerHTML = str;

// 2. 带高亮的输出
function syntaxHighlight(json) {
    json = json.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');
    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>';
    });
}

document.getElementById('output2').innerHTML = syntaxHighlight(str);
</script>

</body>
</html>

via: http://stackoverflow.com/questions/4810841/how-can-i-pretty-print-json-using-javascript