JSON.stringify 以漂亮的打印方式输出到 div

IT技术 javascript html json pretty-print stringify
2021-03-13 04:44:18

JSON.stringify是一个 json 对象

result = JSON.stringify(message, my_json, 2)

2上面的说法应该是相当打印结果。如果我做类似的事情,它会这样做alert(result)但是,我想通过将其附加到 div 中来将其输出给用户。当我这样做时,我只显示一行。(我认为它不起作用,因为中断和空格没有被解释为 html?)

{ "data": { "x": "1", "y": "1", "url": "http://url.com" }, "event": "start", "show": 1, "id": 50 }

有没有办法以JSON.stringify漂亮的打印方式将结果输出到 div?

6个回答

请使用<pre> 标签

演示:http : //jsfiddle.net/K83cK/

var data = {
  "data": {
    "x": "1",
    "y": "1",
    "url": "http://url.com"
  },
  "event": "start",
  "show": 1,
  "id": 50
}


document.getElementById("json").textContent = JSON.stringify(data, undefined, 2);
<pre id="json"></pre>

我总是忘记 <pre> 标签。
2021-04-18 04:44:18
但是如果我在上面的 js fiddle in data 中使用 "array": [1,2,3,4] 。它将数组拆分为多行。为什么?
2021-04-24 04:44:18
为避免长长的队伍排出容器,pre 标签是其子标签,应在 pre 标签中添加以下 css 规则:stackoverflow.com/a/248013/883083
2021-05-03 04:44:18
@iGod:这就是stringify格式。您可以使用“replacer”函数来覆盖它,该函数是第二个参数,如下所示。 JSON.stringify({name: "Diode", details: {age: 123, place: "xyz"}, list: [1, 2, 3, 4, 5]},function(k,v){ if(v instanceof Array) return JSON.stringify(v); return v; },2);
2021-05-12 04:44:18
pre告诉浏览器引擎里面的内容是预先格式化的,不需要任何修改就可以显示。所以浏览器不会删除空格、新行等。 code是为了使其更具语义,并表示里面的内容是一个代码片段。它与格式无关。建议这样使用,<pre><code> /* Your code snippet here. */ </code></pre>
2021-05-14 04:44:18

确保 JSON 输出在<pre>标签中。

我的建议基于:

  • 用 <br> 替换每个 '\n'(换行符)
  • 用   替换每个空格

var x = { "data": { "x": "1", "y": "1", "url": "http://url.com" }, "event": "start", "show": 1, "id": 50 };


document.querySelector('#newquote').innerHTML = JSON.stringify(x, null, 6)
     .replace(/\n( *)/g, function (match, p1) {
         return '<br>' + '&nbsp;'.repeat(p1.length);
     });
<div id="newquote"></div>

如果您的<pre>标签显示单行 JSON,因为字符串已经是这样提供的(通过 api 或某些不受您控制的函数/页面),您可以像这样重新格式化它:

HTML:

<pre id="json">{"some":"JSON string"}</pre>

JavaScript:

    (function() {
        var element = document.getElementById("json");
        var obj = JSON.parse(element.innerText);
        element.innerHTML = JSON.stringify(obj, undefined, 2);
    })();

或 jQuery:

    $(formatJson);

    function formatJson() {
        var element = $("#json");
        var obj = JSON.parse(element.text());
        element.html(JSON.stringify(obj, undefined, 2));
    }

完全披露我是这个包的作者,但另一种以可读的方式输出 JSON 或 JavaScript 对象的方法是能够跳过部分,折叠它们等nodedumphttps://github.com/ragamufin/nodedump