ฉันจะแสดง JSON ในรูปแบบที่อ่านง่าย (สำหรับผู้อ่านที่เป็นมนุษย์) ได้อย่างไร? ฉันกำลังมองหาการเยื้องและช่องว่างเป็นหลักด้วยบางทีสี / แบบอักษร / อื่น ๆ
<pre>
แท็ก
ฉันจะแสดง JSON ในรูปแบบที่อ่านง่าย (สำหรับผู้อ่านที่เป็นมนุษย์) ได้อย่างไร? ฉันกำลังมองหาการเยื้องและช่องว่างเป็นหลักด้วยบางทีสี / แบบอักษร / อื่น ๆ
<pre>
แท็ก
คำตอบ:
JSON.stringify()
พริตตี้พิมพ์จะดำเนินการโดยกำเนิดใน อาร์กิวเมนต์ที่สามช่วยให้สามารถพิมพ์ได้สวยและตั้งค่าระยะห่างที่จะใช้:
var str = JSON.stringify(obj, null, 2); // spacing level = 2
หากคุณต้องการเน้นไวยากรณ์คุณอาจใช้เวทมนตร์ของ regex ดังนี้:
function 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>';
});
}
ดูการทำงานที่นี่: jsfiddle
หรือตัวอย่างโค้ดแบบเต็มด้านล่าง:
<pre>
แม้ว่า
#transactionResponse
องค์ประกอบของคุณมีwhite-space: pre;
สไตล์เป็น CSS
stringify(...)
ทำงานบนวัตถุ JSON ไม่ได้อยู่ในสตริง JSON หากคุณมีสตริงคุณต้องJSON.parse(...)
ก่อน
คำตอบของผู้ใช้ Pumbaa80 นั้นยอดเยี่ยมถ้าคุณมีวัตถุที่คุณต้องการพิมพ์สวย หากคุณเริ่มต้นจากสตริง JSON ที่ถูกต้องที่คุณต้องการพิมพ์สวยคุณต้องแปลงเป็นวัตถุก่อน:
var jsonString = '{"some":"json"}';
var jsonPretty = JSON.stringify(JSON.parse(jsonString),null,2);
สิ่งนี้สร้างวัตถุ JSON จากสตริงและจากนั้นแปลงกลับเป็นสตริงโดยใช้การพิมพ์ที่สวยของ JSON stringify
JSON.parse
JSON.stringify(jsonString, null, 2)
ขึ้นอยู่กับ JSON / Object ของคุณ
<pre></pre>
แท็ก
JSON.parse
จะตายก็ต่อเมื่อคุณมี JSON str ไม่ถูกต้องหรือมันถูกแปลงเป็นวัตถุแล้ว ... ต้องแน่ใจว่าคุณรู้ว่าดาต้าประเภทใดที่คุณกำลังติดต่อด้วยก่อนที่จะลองJSON.parse
จากคำตอบของ 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);
}
นี่คือ bookmarklet ที่คุณสามารถใช้ได้:
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 ไม่รองรับการหลบหนี% ในคอนโซล แปลก ... บางทีมันอาจจะใช้ได้ในอนาคต
ไชโย!
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>"
ตัวอย่าง:
<pre>
เป็นต้องถ้าคุณแสดง JSON <div>
ในส่วน โหวตขึ้นสำหรับคำใบ้นั้นเท่านั้น!
ฉันใช้ส่วนขยาย JSONView Chrome (มันสวยเท่าที่จะได้รับ :):
แก้ไข: เพิ่มแล้ว jsonreport.js
ฉันยังได้เปิดตัว jsonreport.js โปรแกรมดูภาพสวย ๆ ออนไลน์ JSON ซึ่งให้รายงาน HTML5 ที่มนุษย์สามารถอ่านได้คุณสามารถใช้เพื่อดูข้อมูล JSON ใด ๆ
คุณสามารถอ่านเพิ่มเติมเกี่ยวกับรูปแบบในรูปแบบรายงาน JavaScript HTML5ใหม่
คุณสามารถใช้ซึ่งเป็นทางลัดสำหรับ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})}))"
ต่อไปนี้เป็น HTML อันยอดเยี่ยมของ user123444555621 ที่ปรับให้เหมาะกับหน้าจอ มีประโยชน์สำหรับการดีบักสคริปต์ Node:
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);
สำหรับวัตถุประสงค์ในการแก้ไขข้อบกพร่องฉันใช้:
console.debug ("% o" ข้อมูล);
console.debug(data);
ใน (อย่างน้อย) Chrome และ Firefox มันไม่ได้แสดงการเป็นตัวแทนของ JSON data
นับประสาพิมพ์สวย
console.debug("%s: %o x %d", str, data, cnt);
อาจยังเป็นประโยชน์กับใครบางคน
console.dir
ที่ช่วยให้นำทางข้อมูล
ไม่พอใจกับเครื่องพิมพ์อื่น ๆ สวยสำหรับ Ruby ผมเขียนของตัวเอง ( NeatJSON ) แล้วรังเพลิงมัน JavaScriptรวมทั้งจัดรูปแบบออนไลน์ฟรี รหัสฟรีภายใต้ใบอนุญาต MIT (ค่อนข้างอนุญาต)
คุณสมบัติ (อุปกรณ์เสริม):
ฉันจะคัดลอกซอร์สโค้ดที่นี่เพื่อไม่ได้เป็นเพียงลิงค์ไปยังไลบรารี แต่ฉันแนะนำให้คุณไปที่หน้าโปรเจ็กต์ GitHubเพราะจะได้รับการอัพเดตและโค้ดด้านล่างจะไม่ถูกเก็บไว้
(function(exports){
exports.neatJSON = neatJSON;
function neatJSON(value,opts){
opts = opts || {}
if (!('wrap' in opts)) opts.wrap = 80;
if (opts.wrap==true) opts.wrap = -1;
if (!('indent' in opts)) opts.indent = ' ';
if (!('arrayPadding' in opts)) opts.arrayPadding = ('padding' in opts) ? opts.padding : 0;
if (!('objectPadding' in opts)) opts.objectPadding = ('padding' in opts) ? opts.padding : 0;
if (!('afterComma' in opts)) opts.afterComma = ('aroundComma' in opts) ? opts.aroundComma : 0;
if (!('beforeComma' in opts)) opts.beforeComma = ('aroundComma' in opts) ? opts.aroundComma : 0;
if (!('afterColon' in opts)) opts.afterColon = ('aroundColon' in opts) ? opts.aroundColon : 0;
if (!('beforeColon' in opts)) opts.beforeColon = ('aroundColon' in opts) ? opts.aroundColon : 0;
var apad = repeat(' ',opts.arrayPadding),
opad = repeat(' ',opts.objectPadding),
comma = repeat(' ',opts.beforeComma)+','+repeat(' ',opts.afterComma),
colon = repeat(' ',opts.beforeColon)+':'+repeat(' ',opts.afterColon);
return build(value,'');
function build(o,indent){
if (o===null || o===undefined) return indent+'null';
else{
switch(o.constructor){
case Number:
var isFloat = (o === +o && o !== (o|0));
return indent + ((isFloat && ('decimals' in opts)) ? o.toFixed(opts.decimals) : (o+''));
case Array:
var pieces = o.map(function(v){ return build(v,'') });
var oneLine = indent+'['+apad+pieces.join(comma)+apad+']';
if (opts.wrap===false || oneLine.length<=opts.wrap) return oneLine;
if (opts.short){
var indent2 = indent+' '+apad;
pieces = o.map(function(v){ return build(v,indent2) });
pieces[0] = pieces[0].replace(indent2,indent+'['+apad);
pieces[pieces.length-1] = pieces[pieces.length-1]+apad+']';
return pieces.join(',\n');
}else{
var indent2 = indent+opts.indent;
return indent+'[\n'+o.map(function(v){ return build(v,indent2) }).join(',\n')+'\n'+indent+']';
}
case Object:
var keyvals=[],i=0;
for (var k in o) keyvals[i++] = [JSON.stringify(k), build(o[k],'')];
if (opts.sorted) keyvals = keyvals.sort(function(kv1,kv2){ kv1=kv1[0]; kv2=kv2[0]; return kv1<kv2?-1:kv1>kv2?1:0 });
keyvals = keyvals.map(function(kv){ return kv.join(colon) }).join(comma);
var oneLine = indent+"{"+opad+keyvals+opad+"}";
if (opts.wrap===false || oneLine.length<opts.wrap) return oneLine;
if (opts.short){
var keyvals=[],i=0;
for (var k in o) keyvals[i++] = [indent+' '+opad+JSON.stringify(k),o[k]];
if (opts.sorted) keyvals = keyvals.sort(function(kv1,kv2){ kv1=kv1[0]; kv2=kv2[0]; return kv1<kv2?-1:kv1>kv2?1:0 });
keyvals[0][0] = keyvals[0][0].replace(indent+' ',indent+'{');
if (opts.aligned){
var longest = 0;
for (var i=keyvals.length;i--;) if (keyvals[i][0].length>longest) longest = keyvals[i][0].length;
var padding = repeat(' ',longest);
for (var i=keyvals.length;i--;) keyvals[i][0] = padRight(padding,keyvals[i][0]);
}
for (var i=keyvals.length;i--;){
var k=keyvals[i][0], v=keyvals[i][1];
var indent2 = repeat(' ',(k+colon).length);
var oneLine = k+colon+build(v,'');
keyvals[i] = (opts.wrap===false || oneLine.length<=opts.wrap || !v || typeof v!="object") ? oneLine : (k+colon+build(v,indent2).replace(/^\s+/,''));
}
return keyvals.join(',\n') + opad + '}';
}else{
var keyvals=[],i=0;
for (var k in o) keyvals[i++] = [indent+opts.indent+JSON.stringify(k),o[k]];
if (opts.sorted) keyvals = keyvals.sort(function(kv1,kv2){ kv1=kv1[0]; kv2=kv2[0]; return kv1<kv2?-1:kv1>kv2?1:0 });
if (opts.aligned){
var longest = 0;
for (var i=keyvals.length;i--;) if (keyvals[i][0].length>longest) longest = keyvals[i][0].length;
var padding = repeat(' ',longest);
for (var i=keyvals.length;i--;) keyvals[i][0] = padRight(padding,keyvals[i][0]);
}
var indent2 = indent+opts.indent;
for (var i=keyvals.length;i--;){
var k=keyvals[i][0], v=keyvals[i][1];
var oneLine = k+colon+build(v,'');
keyvals[i] = (opts.wrap===false || oneLine.length<=opts.wrap || !v || typeof v!="object") ? oneLine : (k+colon+build(v,indent2).replace(/^\s+/,''));
}
return indent+'{\n'+keyvals.join(',\n')+'\n'+indent+'}'
}
default:
return indent+JSON.stringify(o);
}
}
}
function repeat(str,times){ // http://stackoverflow.com/a/17800645/405017
var result = '';
while(true){
if (times & 1) result += str;
times >>= 1;
if (times) str += str;
else break;
}
return result;
}
function padRight(pad, str){
return (str + pad).substring(0, pad.length);
}
}
neatJSON.version = "0.5";
})(typeof exports === 'undefined' ? this : exports);
ขอบคุณมาก @ ทั้งหมด! ขึ้นอยู่กับคำตอบก่อนหน้านี้ต่อไปนี้เป็นวิธีการชุดตัวเลือกอื่นที่ให้กฎการแทนที่แบบกำหนดเองเป็นพารามิเตอร์:
renderJSON : function(json, rr, code, pre){
if (typeof json !== 'string') {
json = JSON.stringify(json, undefined, '\t');
}
var rules = {
def : 'color:black;',
defKey : function(match){
return '<strong>' + match + '</strong>';
},
types : [
{
name : 'True',
regex : /true/,
type : 'boolean',
style : 'color:lightgreen;'
},
{
name : 'False',
regex : /false/,
type : 'boolean',
style : 'color:lightred;'
},
{
name : 'Unicode',
regex : /"(\\u[a-zA-Z0-9]{4}|\\[^u]|[^\\"])*"(\s*:)?/,
type : 'string',
style : 'color:green;'
},
{
name : 'Null',
regex : /null/,
type : 'nil',
style : 'color:magenta;'
},
{
name : 'Number',
regex : /-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/,
type : 'number',
style : 'color:darkorange;'
},
{
name : 'Whitespace',
regex : /\s+/,
type : 'whitespace',
style : function(match){
return ' ';
}
}
],
keys : [
{
name : 'Testkey',
regex : /("testkey")/,
type : 'key',
style : function(match){
return '<h1>' + match + '</h1>';
}
}
],
punctuation : {
name : 'Punctuation',
regex : /([\,\.\}\{\[\]])/,
type : 'punctuation',
style : function(match){
return '<p>________</p>';
}
}
};
if('undefined' !== typeof jQuery){
rules = $.extend(rules, ('object' === typeof rr) ? rr : {});
}else{
for(var k in rr ){
rules[k] = rr[k];
}
}
var str = json.replace(/([\,\.\}\{\[\]]|"(\\u[a-zA-Z0-9]{4}|\\[^u]|[^\\"])*"(\s*:)?|\b(true|false|null)\b|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?)/g, function (match) {
var i = 0, p;
if (rules.punctuation.regex.test(match)) {
if('string' === typeof rules.punctuation.style){
return '<span style="'+ rules.punctuation.style + '">' + match + '</span>';
}else if('function' === typeof rules.punctuation.style){
return rules.punctuation.style(match);
} else{
return match;
}
}
if (/^"/.test(match)) {
if (/:$/.test(match)) {
for(i=0;i<rules.keys.length;i++){
p = rules.keys[i];
if (p.regex.test(match)) {
if('string' === typeof p.style){
return '<span style="'+ p.style + '">' + match + '</span>';
}else if('function' === typeof p.style){
return p.style(match);
} else{
return match;
}
}
}
return ('function'===typeof rules.defKey) ? rules.defKey(match) : '<span style="'+ rules.defKey + '">' + match + '</span>';
} else {
return ('function'===typeof rules.def) ? rules.def(match) : '<span style="'+ rules.def + '">' + match + '</span>';
}
} else {
for(i=0;i<rules.types.length;i++){
p = rules.types[i];
if (p.regex.test(match)) {
if('string' === typeof p.style){
return '<span style="'+ p.style + '">' + match + '</span>';
}else if('function' === typeof p.style){
return p.style(match);
} else{
return match;
}
}
}
}
});
if(true === pre)str = '<pre>' + str + '</pre>';
if(true === code)str = '<code>' + str + '</code>';
return str;
}
มันทำงานได้ดี:
console.table()
อ่านเพิ่มเติมได้ที่นี่: https://developer.mozilla.org/pt-BR/docs/Web/API/Console/table
JSON ของ Douglas Crockford ในไลบรารี JavaScript จะทำการพิมพ์ JSON ด้วยวิธี stringify
คุณอาจพบคำตอบสำหรับคำถามที่เก่ากว่านี้มีประโยชน์: ฉันจะพิมพ์ JSON ในเชลล์สคริปต์ยูนิกซ์ได้อย่างไร?
ฉันพบปัญหาในวันนี้ด้วยรหัสของ @ Pumbaa80 ฉันกำลังพยายามใช้ไวยากรณ์ JSON ที่เน้นข้อมูลที่ฉันแสดงในมุมมองMithrilดังนั้นฉันต้องสร้างโหนด DOM สำหรับทุกสิ่งในJSON.stringify
ผลลัพธ์
ฉันแบ่ง regex ที่ยาวมาก ๆ ออกเป็นส่วน ๆ
render_json = (data) ->
# wraps JSON data in span elements so that syntax highlighting may be
# applied. Should be placed in a `whitespace: pre` context
if typeof(data) isnt 'string'
data = JSON.stringify(data, undefined, 2)
unicode = /"(\\u[a-zA-Z0-9]{4}|\\[^u]|[^\\"])*"(\s*:)?/
keyword = /\b(true|false|null)\b/
whitespace = /\s+/
punctuation = /[,.}{\[\]]/
number = /-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/
syntax = '(' + [unicode, keyword, whitespace,
punctuation, number].map((r) -> r.source).join('|') + ')'
parser = new RegExp(syntax, 'g')
nodes = data.match(parser) ? []
select_class = (node) ->
if punctuation.test(node)
return 'punctuation'
if /^\s+$/.test(node)
return 'whitespace'
if /^\"/.test(node)
if /:$/.test(node)
return 'key'
return 'string'
if /true|false/.test(node)
return 'boolean'
if /null/.test(node)
return 'null'
return 'number'
return nodes.map (node) ->
cls = select_class(node)
return Mithril('span', {class: cls}, node)
รหัสในบริบทบน Github ที่นี่
นี่คือองค์ประกอบรูปแบบ / สี JSON แบบง่ายที่เขียนในปฏิกิริยา:
const HighlightedJSON = ({ json }: Object) => {
const highlightedJSON = jsonObj =>
Object.keys(jsonObj).map(key => {
const value = jsonObj[key];
let valueType = typeof value;
const isSimpleValue =
["string", "number", "boolean"].includes(valueType) || !value;
if (isSimpleValue && valueType === "object") {
valueType = "null";
}
return (
<div key={key} className="line">
<span className="key">{key}:</span>
{isSimpleValue ? (
<span className={valueType}>{`${value}`}</span>
) : (
highlightedJSON(value)
)}
</div>
);
});
return <div className="json">{highlightedJSON(json)}</div>;
};
เห็นมันทำงานใน CodePen นี้: https://codepen.io/benshope/pen/BxVpjo
หวังว่าจะช่วย!
คุณสามารถใช้JSON.stringify(your object, null, 2)
พารามิเตอร์ที่สองสามารถใช้เป็นฟังก์ชั่นทดแทนซึ่งใช้คีย์และ Val เป็นพารามิเตอร์ซึ่งสามารถใช้ในกรณีที่คุณต้องการแก้ไขบางอย่างภายในวัตถุ JSON ของคุณ
การอ้างอิงเพิ่มเติม: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify
หากคุณต้องการให้สิ่งนี้ทำงานใน textarea โซลูชันที่ยอมรับจะไม่ทำงาน
<textarea id='textarea'></textarea>
$("#textarea").append(formatJSON(JSON.stringify(jsonobject),true));
function formatJSON(json,textarea) {
var nl;
if(textarea) {
nl = " ";
} else {
nl = "<br>";
}
var tab = "    ";
var ret = "";
var numquotes = 0;
var betweenquotes = false;
var firstquote = false;
for (var i = 0; i < json.length; i++) {
var c = json[i];
if(c == '"') {
numquotes ++;
if((numquotes + 2) % 2 == 1) {
betweenquotes = true;
} else {
betweenquotes = false;
}
if((numquotes + 3) % 4 == 0) {
firstquote = true;
} else {
firstquote = false;
}
}
if(c == '[' && !betweenquotes) {
ret += c;
ret += nl;
continue;
}
if(c == '{' && !betweenquotes) {
ret += tab;
ret += c;
ret += nl;
continue;
}
if(c == '"' && firstquote) {
ret += tab + tab;
ret += c;
continue;
} else if (c == '"' && !firstquote) {
ret += c;
continue;
}
if(c == ',' && !betweenquotes) {
ret += c;
ret += nl;
continue;
}
if(c == '}' && !betweenquotes) {
ret += nl;
ret += tab;
ret += c;
continue;
}
if(c == ']' && !betweenquotes) {
ret += nl;
ret += c;
continue;
}
ret += c;
} // i loop
return ret;
}
หากคุณกำลังมองหาห้องสมุดที่ดีที่จะนำเสนอ json บนหน้าเว็บ ...
Prism.js ค่อนข้างดี
ฉันพบว่าใช้ JSON.stringify (obj, undefined, 2) เพื่อรับการเยื้องแล้วใช้ปริซึมเพื่อเพิ่มธีมเป็นวิธีที่ดี
หากคุณกำลังโหลดใน JSON ผ่านการโทร ajax คุณสามารถเรียกใช้หนึ่งในวิธีอรรถประโยชน์ของ Prism เพื่อทำการ prettify
ตัวอย่างเช่น:
Prism.highlightAll()
นี่เป็นสิ่งที่ดี:
https://github.com/mafintosh/json-markupจากmafintosh
const jsonMarkup = require('json-markup')
const html = jsonMarkup({hello:'world'})
document.querySelector('#myElem').innerHTML = html
HTML
<link ref="stylesheet" href="style.css">
<div id="myElem></div>
ตัวอย่างสไตล์ชีทสามารถพบได้ที่นี่
https://raw.githubusercontent.com/mafintosh/json-markup/master/style.css
ไม่พบโซลูชันใด ๆ ที่มีการเน้นไวยากรณ์ที่ดีสำหรับคอนโซลดังนั้นนี่คือ 2p ของฉัน
npm install cli-highlight --save
const highlight = require('cli-highlight').highlight
console.logjson = (obj) => console.log(
highlight( JSON.stringify(obj, null, 4),
{ language: 'json', ignoreIllegals: true } ));
console.logjson({foo: "bar", someArray: ["string1", "string2"]});
ผมขอแนะนำให้ใช้HighlightJS จะใช้หลักการเดียวกันเป็นคำตอบที่ได้รับการยอมรับ แต่ยังสามารถใช้งานสำหรับภาษาอื่น ๆ อีกมากมายและมีกำหนดไว้ล่วงหน้าหลายรูปแบบสี หากใช้RequireJSคุณสามารถสร้างโมดูลที่เข้ากันได้กับ
python3 tools/build.py -tamd json xml <specify other language here>
การสร้างอาศัย Python3 และ Java เพิ่ม-n
เพื่อสร้างเวอร์ชันที่ไม่ย่อเล็กสุด
นี่คือวิธีที่คุณสามารถพิมพ์ได้โดยไม่ต้องใช้ฟังก์ชั่นพื้นฐาน
function pretty(ob, lvl = 0) {
let temp = [];
if(typeof ob === "object"){
for(let x in ob) {
if(ob.hasOwnProperty(x)) {
temp.push( getTabs(lvl+1) + x + ":" + pretty(ob[x], lvl+1) );
}
}
return "{\n"+ temp.join(",\n") +"\n" + getTabs(lvl) + "}";
}
else {
return ob;
}
}
function getTabs(n) {
let c = 0, res = "";
while(c++ < n)
res+="\t";
return res;
}
let obj = {a: {b: 2}, x: {y: 3}};
console.log(pretty(obj));
/*
{
a: {
b: 2
},
x: {
y: 3
}
}
*/
วิธีที่ง่ายที่สุดในการแสดงวัตถุสำหรับการดีบัก:
console.log("data",data) // lets you unfold the object manually
หากคุณต้องการแสดงวัตถุใน DOM คุณควรพิจารณาว่ามันอาจมีสตริงที่จะตีความว่าเป็น HTML ดังนั้นคุณต้องหลบหนี ...
var s = JSON.stringify(data,null,2) // format
var e = new Option(s).innerHTML // escape
document.body.insertAdjacentHTML('beforeend','<pre>'+e+'</pre>') // display
<!-- here is a complete example pretty print with more space between lines-->
<!-- be sure to pass a json string not a json object -->
<!-- use line-height to increase or decrease spacing between json lines -->
<style type="text/css">
.preJsonTxt{
font-size: 18px;
text-overflow: ellipsis;
overflow: hidden;
line-height: 200%;
}
.boxedIn{
border: 1px solid black;
margin: 20px;
padding: 20px;
}
</style>
<div class="boxedIn">
<h3>Configuration Parameters</h3>
<pre id="jsonCfgParams" class="preJsonTxt">{{ cfgParams }}</pre>
</div>
<script language="JavaScript">
$( document ).ready(function()
{
$(formatJson);
<!-- this will do a pretty print on the json cfg params -->
function formatJson() {
var element = $("#jsonCfgParams");
var obj = JSON.parse(element.text());
element.html(JSON.stringify(obj, undefined, 2));
}
});
</script>
เพื่อเน้นและตกแต่งในการHTML
ใช้งานBootstrap
:
function prettifyJson(json, prettify) {
if (typeof json !== 'string') {
if (prettify) {
json = JSON.stringify(json, undefined, 4);
} else {
json = JSON.stringify(json);
}
}
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 = "<span>";
if (/^"/.test(match)) {
if (/:$/.test(match)) {
cls = "<span class='text-danger'>";
} else {
cls = "<span>";
}
} else if (/true|false/.test(match)) {
cls = "<span class='text-primary'>";
} else if (/null/.test(match)) {
cls = "<span class='text-info'>";
}
return cls + match + "</span>";
}
);
}