使用 JavaScript 漂亮地打印 JSON

问:

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

答1:

huntsbot.com – 程序员副业首选,一站式外包任务、远程工作、创意产品分享订阅平台。

Pretty-printing is implemented natively in 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, '&').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 '' + match + '';
    });
}

在此处查看实际操作:jsfiddle

或下面提供的完整片段:

函数输出(inp){ document.body.appendChild(document.createElement(‘pre’)).innerHTML = inp; } function syntaxHighlight(json) { json = json.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, 函数(匹配){ 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 ‘’ + 匹配 + ‘’; }); } 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);输出(str);输出(语法高亮(str)); pre {outline: 1px solid #ccc;填充:5px;边距:5px; } .string { 颜色:绿色; } .number { 颜色:深橙色; } .boolean { 颜色:蓝色; } .null { 颜色:洋红色; } .key { 颜色:红色; }

超级棒。我添加了一个函数以在新窗口中弹出它以进行调试: var json = syntaxHighlight(JSON.stringify(obj,undefined,4);); var w = window.open(); var html = " "; html+= " "+json+" "; w.document.writeln(html);

好的。不过,不要忘记它需要 css 和 。

请注意,stringify(...) 适用于 JSON 对象,而不适用于 JSON 字符串。如果你有一个字符串,你需要先JSON.parse(...)

我在这个 sardapv.github.io/json-prettier 上构建了一个工具 :)

你好,这太棒了。它有效,但我在正则表达式中的倒数第二个反斜杠上收到一个 lint 警告 - 不必要的转义字符:\- no-useless-escape。我没有对它进行单元测试,所以害怕 // eslint-disable-next-line

答2:

保持自己快人一步,享受全网独家提供的一站式外包任务、远程工作、创意产品订阅服务–huntsbot.com

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

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

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

请注意,在显示字符串时,您需要将其包装在 标记中。

它似乎只在使用 textarea 时有效,否则换行符不会进来

答3:

huntsbot.com洞察每一个产品背后的需求与收益,从而捕获灵感

更好的方法。

Prettify JSON Array in Javascript

JSON.stringify(jsonobj,null,'\t')

答4:

huntsbot.com汇聚了国内外优秀的初创产品创意,可按收入、分类等筛选,希望这些产品与实践经验能给您带来灵感。

var jsonObj = {"streetLabel": "Avenue Anatole France", "city": "Paris 07",  "postalCode": "75007", "countryCode": "FRA",  "countryLabel": "France" };

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

如果以 HTML 显示,您应该添加应答器

 

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

例子:

var jsonObj = {“streetLabel”: “Avenue Anatole France”, “city”: “Paris 07”, “postalCode”: “75007”, “countryCode”: “FRA”, “countryLabel”: “France” }; document.getElementById(“result-before”).innerHTML = JSON.stringify(jsonObj); document.getElementById(“result-after”).innerHTML = “”+JSON.stringify(jsonObj,undefined, 2) +“” div { float:left;明确:两者;边距:1em 0; }

答5:

huntsbot.com精选全球7大洲远程工作机会,涵盖各领域,帮助想要远程工作的数字游民们能更精准、更高效的找到对方。

根据 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 不支持 % 在控制台中转义。奇怪…也许这将在未来起作用。

干杯!

https://i.stack.imgur.com/GsMl9.jpg

答6:

HuntsBot周刊–不定时分享成功产品案例,学习他们如何成功建立自己的副业–huntsbot.com

我使用 JSONView Chrome extension(它非常漂亮 😃:

编辑:添加 jsonreport.js

我还发布了一个在线独立的 JSON 漂亮打印查看器 jsonreport.js,它提供了一个人类可读的 HTML5 报告,您可以使用它来查看任何 JSON 数据。

您可以在 New JavaScript HTML5 Report Format 中了解有关格式的更多信息。

答7:

huntsbot.com提供全网独家一站式外包任务、远程工作、创意产品分享与订阅服务!

您可以使用 console.dir(),它是 console.log(util.inspect()) 的快捷方式。 (唯一的区别是它绕过了在对象上定义的任何自定义 inspect() 函数。)

它使用语法高亮,智能缩进,从键中删除引号,并使输出尽可能漂亮。

const object = JSON.parse(jsonString)

console.dir(object, {depth: null, colors: true})

对于命令行:

cat package.json | node -e “process.stdin.pipe(new stream.Writable({write: chunk => console.dir(JSON.parse(chunk), {depth: null, colors: true})}))”

huntsbot.com高效搞钱,一站式跟进超10+任务平台外包需求

答8:

huntsbot.com – 程序员副业首选,一站式外包任务、远程工作、创意产品分享订阅平台。

这是 user123444555621 的适用于终端的很棒的 HTML。方便调试节点脚本:

function prettyJ(json) {
  if (typeof json !== 'string') {
    json = JSON.stringify(json, undefined, 2);
  }
  return json.replace(/("(\\u[a-zA-Z0-9]{4}|\\[^u]|[^\\"])*"(\s*:)?|\b(true|false|null)\b|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?)/g, 
    function (match) {
      let cls = "\x1b[36m";
      if (/^"/.test(match)) {
        if (/:$/.test(match)) {
          cls = "\x1b[34m";
        } else {
          cls = "\x1b[32m";
        }
      } else if (/true|false/.test(match)) {
        cls = "\x1b[35m"; 
      } else if (/null/.test(match)) {
        cls = "\x1b[31m";
      }
      return cls + match + "\x1b[0m";
    }
  );
}

用法:

// thing = any json OR string of json
prettyJ(thing);

答9:

huntsbot.com提供全网独家一站式外包任务、远程工作、创意产品分享与订阅服务!

您可以使用 JSON.stringify(your object, null, 2) 第二个参数可以用作替换函数,它以 key 和 Val 作为参数。如果您想修改 JSON 对象中的某些内容,可以使用它。

更多参考:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify

huntsbot.com汇聚了国内外优秀的初创产品创意,可按收入、分类等筛选,希望这些产品与实践经验能给您带来灵感。

这个答案是超过 5400 票的最佳答案的副本。

答10:

huntsbot.com – 高效赚钱,自由工作

如果您使用的是 ES5,只需调用 JSON.stringify :

第二个参数:替换器;设置为空,

第三个参数:空间;使用标签。

JSON.stringify(anObject, null, '\t');

来源:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify

答11:

huntsbot.com全球7大洲远程工作机会,探索不一样的工作方式

出于调试目的,我使用:

console.debug("%o", data);

https://getfirebug.com/wiki/index.php/Console_API

https://developer.mozilla.org/en-US/docs/DOM/console

原文链接:https://www.huntsbot.com/qa/3VED/pretty-print-json-using-javascript?lang=zh_CN&from=csdn

保持自己快人一步,享受全网独家提供的一站式外包任务、远程工作、创意产品订阅服务–huntsbot.com

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值