使用 JavaScript 打印漂亮的 JSON

IT技术 javascript json pretty-print
2021-02-04 23:56:43

如何以易于阅读(供人类读者)的格式显示 JSON?我主要寻找缩进和空白,甚至可能有颜色/字体样式/等。

6个回答

漂亮打印在JSON.stringify(). 第三个参数启用漂亮的打印并设置要使用的间距:

var str = JSON.stringify(obj, null, 2); // spacing level = 2

如果你需要语法高亮,你可以像这样使用一些正则表达式:

function syntaxHighlight(json) {
    if (typeof json != 'string') {
         json = JSON.stringify(json, undefined, 2);
    }
    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>';
    });
}

在此处查看操作:jsfiddle

或者下面提供的完整片段:

请注意,它stringify(...)适用于 JSON对象,而不适用于 JSON 字符串。如果你有一个字符串,你需要JSON.parse(...)
2021-03-13 23:56:43
我在这个sardapv.github.io/json-prettier上构建了一个工具:)
2021-03-16 23:56:43
太棒了。我添加了一个函数以在新窗口中弹出打开它以进行调试: var json = syntaxHighlight(JSON.stringify(obj,undefined,4);); var w = window.open(); var html = "<head><style>pre {outline: 1px solid #ccc; padding: 5px; margin: 5px; } .string { color: green; } "; html+= " .number { color: darkorange; } .boolean { color: blue; } .null { color: magenta; } .key { color: red; }</style></head><body>"; html+="<pre>"+json+"</pre>"; w.document.writeln(html);
2021-03-24 23:56:43
好的。不过,不要忘记它需要 css 和 a <pre>
2021-03-28 23:56:43
@user123444555621 感谢您所做的一切。正是我要找的
2021-04-02 23:56:43

如果您有想要漂亮打印对象,则用户 Pumbaa80 的回答很棒如果您从想要漂亮打印的有效 JSON字符串开始,则需要先将其转换为对象:

var jsonString = '{"some":"json"}';
var jsonPretty = JSON.stringify(JSON.parse(jsonString),null,2);  

这将从字符串构建一个 JSON 对象,然后使用 JSON stringify 的漂亮打印将其转换回字符串。

它似乎只在使用 textarea 时有效,否则换行符不进来
2021-03-10 23:56:43
请注意,在显示字符串时,您需要将其包装在<pre></pre>标签中。
2021-03-24 23:56:43

更好的方法。

在 Javascript 中美化 JSON 数组

JSON.stringify(jsonobj,null,'\t')
var jsonObj = {"streetLabel": "Avenue Anatole France", "city": "Paris 07",  "postalCode": "75007", "countryCode": "FRA",  "countryLabel": "France" };

document.getElementById("result-before").innerHTML = JSON.stringify(jsonObj);

在 HTML 中显示的情况下,您应该添加一个 balise <pre></pre>

document.getElementById("result-after").innerHTML = "<pre>"+JSON.stringify(jsonObj,undefined, 2) +"</pre>"

例子:

根据 Pumbaa80 的回答,我修改了代码以使用 console.log 颜色(肯定在 Chrome 上工作)而不是 HTML。输出可以在控制台内看到。您可以编辑函数内的 _variables 以添加更多样式。

function JSONstringify(json) {
    if (typeof json != 'string') {
        json = JSON.stringify(json, undefined, '\t');
    }

    var 
        arr = [],
        _string = 'color:green',
        _number = 'color:darkorange',
        _boolean = 'color:blue',
        _null = 'color:magenta',
        _key = 'color:red';

    json = json.replace(/("(\\u[a-zA-Z0-9]{4}|\\[^u]|[^\\"])*"(\s*:)?|\b(true|false|null)\b|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?)/g, function (match) {
        var style = _number;
        if (/^"/.test(match)) {
            if (/:$/.test(match)) {
                style = _key;
            } else {
                style = _string;
            }
        } else if (/true|false/.test(match)) {
            style = _boolean;
        } else if (/null/.test(match)) {
            style = _null;
        }
        arr.push(style);
        arr.push('');
        return '%c' + match + '%c';
    });

    arr.unshift(json);

    console.log.apply(console, arr);
}

这是您可以使用的书签:

javascript:function JSONstringify(json) {if (typeof json != 'string') {json = JSON.stringify(json, undefined, '\t');}var arr = [],_string = 'color:green',_number = 'color:darkorange',_boolean = 'color:blue',_null = 'color:magenta',_key = 'color:red';json = json.replace(/("(\\u[a-zA-Z0-9]{4}|\\[^u]|[^\\"])*"(\s*:)?|\b(true|false|null)\b|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?)/g, function (match) {var style = _number;if (/^"/.test(match)) {if (/:$/.test(match)) {style = _key;} else {style = _string;}} else if (/true|false/.test(match)) {style = _boolean;} else if (/null/.test(match)) {style = _null;}arr.push(style);arr.push('');return '%c' + match + '%c';});arr.unshift(json);console.log.apply(console, arr);};void(0);

用法:

var obj = {a:1, 'b':'foo', c:[false,null, {d:{e:1.3e5}}]};
JSONstringify(obj);

编辑:我只是试图在变量声明之后用这一行转义 % 符号:

json = json.replace(/%/g, '%%');

但我发现 Chrome 不支持控制台中的 % 转义。奇怪……也许这在未来会奏效。

干杯!

在此处输入图片说明