Y para seguir con los posts de Visores JSON este otro formateador: JsonFormatter.
Y aquí el código de la versión simple de este visor:
| <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"> <head> <script> // we need tabs as spaces and not CSS magin-left // in order to ratain format when coping and pasing the code window.SINGLE_TAB = " "; window.ImgCollapsed = "Collapsed.gif"; window.ImgExpanded = "Expanded.gif"; window.QuoteKeys = true; function $id(id){ return document.getElementById(id); } function IsArray(obj) { return obj && typeof obj === ‘object’ && typeof obj.length === ‘number’ && !(obj.propertyIsEnumerable(‘length’)); } function Process(){ SetTab(); window.IsCollapsible = true; var json = $id("RawJson").value; var html = ""; try{ if(json == "") json = """"; var obj = eval("["+json+"]"); html = ProcessObject(obj[0], 0, false, false, false); $id("Canvas").innerHTML = "<PRE class=’CodeContainer’>"+html+"</PRE>"; }catch(e){ alert("JSON is not well formated:n"+e.message); $id("Canvas").innerHTML = ""; } } window._dateObj = new Date(); window._regexpObj = new RegExp(); function ProcessObject(obj, indent, addComma, isArray, isPropertyContent){ var html = ""; var comma = (addComma) ? "<span class=’Comma’>,</span> " : ""; var type = typeof obj; var clpsHtml =""; if(IsArray(obj)){ if(obj.length == 0){ html += GetRow(indent, "<span class=’ArrayBrace’>[ ]</span>"+comma, isPropertyContent); }else{ clpsHtml = window.IsCollapsible ? "<span><img src=""+window.ImgExpanded+"" onClick="ExpImgClicked(this)" /></span><span class=’collapsible’>" : ""; html += GetRow(indent, "<span class=’ArrayBrace’>[</span>"+clpsHtml, isPropertyContent); for(var i = 0; i < obj.length; i++){ html += ProcessObject(obj[i], indent + 1, i < (obj.length – 1), true, false); } clpsHtml = window.IsCollapsible ? "</span>" : ""; html += GetRow(indent, clpsHtml+"<span class=’ArrayBrace’>]</span>"+comma); } }else if(type == ‘object’){ if (obj == null){ html += FormatLiteral("null", "", comma, indent, isArray, "Null"); }else if (obj.constructor == window._dateObj.constructor) { html += FormatLiteral("new Date(" + obj.getTime() + ") /*" + obj.toLocaleString()+"*/", "", comma, indent, isArray, "Date"); }else if (obj.constructor == window._regexpObj.constructor) { html += FormatLiteral("new RegExp(" + obj + ")", "", comma, indent, isArray, "RegExp"); }else{ var numProps = 0; for(var prop in obj) numProps++; if(numProps == 0){ html += GetRow(indent, "<span class=’ObjectBrace’>{ }</span>"+comma, isPropertyContent); }else{ clpsHtml = window.IsCollapsible ? "<span><img src=""+window.ImgExpanded+"" onClick="ExpImgClicked(this)" /></span><span class=’collapsible’>" : ""; html += GetRow(indent, "<span class=’ObjectBrace’>{</span>"+clpsHtml, isPropertyContent); var j = 0; for(var prop in obj){ var quote = window.QuoteKeys ? """ : ""; html += GetRow(indent + 1, "<span class=’PropertyName’>"+quote+prop+quote+"</span>: "+ProcessObject(obj[prop], indent + 1, ++j < numProps, false, true)); } clpsHtml = window.IsCollapsible ? "</span>" : ""; html += GetRow(indent, clpsHtml+"<span class=’ObjectBrace’>}</span>"+comma); } } }else if(type == ‘number’){ html += FormatLiteral(obj, "", comma, indent, isArray, "Number"); }else if(type == ‘boolean’){ html += FormatLiteral(obj, "", comma, indent, isArray, "Boolean"); }else if(type == ‘function’){ if (obj.constructor == window._regexpObj.constructor) { html += FormatLiteral("new RegExp(" + obj + ")", "", comma, indent, isArray, "RegExp"); }else{ obj = FormatFunction(indent, obj); html += FormatLiteral(obj, "", comma, indent, isArray, "Function"); } }else if(type == ‘undefined’){ html += FormatLiteral("undefined", "", comma, indent, isArray, "Null"); }else{ html += FormatLiteral(obj.toString().split("\").join("\\").split(‘"’).join(‘\"’), """, comma, indent, isArray, "String"); } return html; } function FormatLiteral(literal, quote, comma, indent, isArray, style){ if(typeof literal == ‘string’) literal = literal.split("<").join("<").split(">").join(">"); var str = "<span class=’"+style+"’>"+quote+literal+quote+comma+"</span>"; if(isArray) str = GetRow(indent, str); return str; } function FormatFunction(indent, obj){ var tabs = ""; for(var i = 0; i < indent; i++) tabs += window.TAB; var funcStrArray = obj.toString().split("n"); var str = ""; for(var i = 0; i < funcStrArray.length; i++){ str += ((i==0)?"":tabs) + funcStrArray[i] + "n"; } return str; } function GetRow(indent, data, isPropertyContent){ var tabs = ""; for(var i = 0; i < indent && !isPropertyContent; i++) tabs += window.TAB; if(data != null && data.length > 0 && data.charAt(data.length-1) != "n") data = data+"n"; return tabs+data; } function TraverseChildren(element, func, depth){ for(var i = 0; i < element.childNodes.length; i++){ TraverseChildren(element.childNodes[i], func, depth + 1); } func(element, depth); } function ExpImgClicked(img){ var container = img.parentNode.nextSibling; if(!container) return; var disp = "none"; var src = window.ImgCollapsed; if(container.style.display == "none"){ disp = "inline"; src = window.ImgExpanded; } container.style.display = disp; img.src = src; } function SetTab(){ window.TAB = MultiplyString(2, window.SINGLE_TAB); } function EnsureIsPopulated(){ if(!$id("Canvas").innerHTML && !!$id("RawJson").value) Process(); } function MultiplyString(num, str){ var sb =[]; for(var i = 0; i < num; i++){ sb.push(str); } return sb.join(""); } function LinkToJson(){ var val = $id("RawJson").value; val = escape(val.split(‘/n’).join(‘ ‘).split(‘/r’).join(‘ ‘)); $id("InvisibleLinkUrl").value = val; $id("InvisibleLink").submit(); } </script> <style> div.ControlsRow, div.HeadersRow { font-family: Georgia; } div.Canvas { font-family: Lucida Console, Georgia; font-size: 13px; background-color:#ECECEC; color:#000000; border:solid 1px #CECECE; } .ObjectBrace { color:#00AA00; font-weight:bold; } .ArrayBrace { color:#0033FF; font-weight:bold; } .PropertyName { color:#CC0000; font-weight:bold; } .String { color:#007777; } .Number { color:#AA00AA; } .Boolean { color:#0000FF; } .Function { color:#AA6633; text-decoration:italic; } .Null { color:#0000FF; } .Comma { color:#000000; font-weight:bold; } PRE.CodeContainer{ margin-top:0px; margin-bottom:0px; } PRE.CodeContainer img{ cursor:pointer; border:none; margin-bottom:-1px; } #CollapsibleViewDetail a{ padding-left:10px; } #ControlsRow{ white-space:nowrap; font: 11px Georgia; } #HeaderTitle{ text-align:right; font-size:11px; } #HeaderSubTitle{ margin-bottom:2px; margin-top:0px } #RawJson{ width:99%; height:130px; } A.OtherToolsLink { color:#555;text-decoration:none; } A.OtherToolsLink:hover { text-decoration:underline; } </style> </head> <body> <div class="HeadersRow"> <textarea id="RawJson"> </textarea> </div> <div id="ControlsRow"> <input type="Button" value="Format" onClick="Process()"/> </div> <div id="Canvas" class="Canvas"></div> </body> </html> |


Replica a Resumen JSON | Un poco de Java Cancelar la respuesta