<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Showjson on I'm OWenT</title><link>//owent.net/tags/showjson.html</link><description>Recent content in Showjson on I'm OWenT</description><generator>Hugo</generator><language>zh-cn</language><copyright>&lt;a rel="license" href="https://github.com/owent/blog-hugo/blob/master/LICENSE.md"&gt;&lt;img alt="知识共享许可协议" style="border-width:0" src="https://i.creativecommons.org/l/by-nc-sa/4.0/80x15.png" /&gt;&lt;/a&gt;</copyright><lastBuildDate>Sun, 01 Apr 2012 06:17:48 +0000</lastBuildDate><atom:link href="//owent.net/tags/showjson/index.xml" rel="self" type="application/rss+xml"/><item><title>JSON显示库 -- showJson （Javascript）</title><link>//owent.net/2012/573.html</link><pubDate>Sun, 01 Apr 2012 06:17:48 +0000</pubDate><guid>//owent.net/2012/573.html</guid><description>&lt;p&gt;现在的web的js开发很方便啊，但是碰到iframe里的东西还是不方便看到变量的内容，所以就写了这么个看json内容的玩意，还可以当控制台输出用。&lt;/p&gt;&#10;&lt;p&gt;很简单,有需要以后开发新功能&lt;/p&gt;&#10;&lt;pre&gt;&lt;code class="language-js"&gt;/** &#13;&#10; * Show json in a new page.(For debug)&#13;&#10; *&#13;&#10; * Licensed under the MIT or GPL Version 3 licenses.&#13;&#10; * @version 1.3&#13;&#10; * @author OWenT&#13;&#10; * @link http://www.owent.net&#13;&#10; * @history &#13;&#10; * &#9;&#9;2012.12.27 &#13;&#10; * &#9;&#9;&#9;1. 改进JSON内对象循环引用时的导致的栈溢出问题&#13;&#10; * &#9;&#9;&#9;2. 引入层级路径&#13;&#10; * &#9;&#9;&#9;3. 引入锚点&#13;&#10; */&#13;&#10; &#13;&#10; /**&#13;&#10; * Object转为字符串&#13;&#10; * @param {Object} json Object对象 &#13;&#10; * @param {Number} tab 缩进数量&#13;&#10; * @param {Object} rules 应用规则&#13;&#10; * @param {String} path 当前路径&#13;&#10; * @return 生成的HTML&#13;&#10; */&#13;&#10;function json2String(json, tab, rules, path) {&#13;&#10; var tabStr = &amp;#34;&amp;#34;, singleTab = &amp;#34;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;#34;, isClear = false;&#13;&#10; var txt = &amp;#34;&amp;#34;;&#13;&#10; &#13;&#10; if (!rules) {&#13;&#10; rules = {&#13;&#10; id: &amp;#34;__json2string_process&amp;#34; &amp;#43; (new Date).getTime().toString() &amp;#43; (json2String.baseIndex &amp;#43;&amp;#43;),&#13;&#10; objs: []&#13;&#10; };&#13;&#10; isClear = true;&#13;&#10; }&#13;&#10; &#13;&#10; tab = tab || 1;&#13;&#10; if (!path) {&#13;&#10; path = &amp;#34;{ROOT}&amp;#34;;&#13;&#10; txt &amp;#43;= &amp;#34;&amp;lt;a name=\&amp;#34;&amp;#34; &amp;#43; rules.id &amp;#43; &amp;#34;.&amp;#34; &amp;#43; path &amp;#43; &amp;#34;\&amp;#34;&amp;gt; &amp;lt;/a&amp;gt;&amp;#34;;&#13;&#10; }&#13;&#10; &#13;&#10; for (var i = 0; i &amp;lt; tab; i &amp;#43;&amp;#43;) {&#13;&#10; tabStr &amp;#43;= singleTab;&#13;&#10; }&#13;&#10; &#13;&#10; if (!json &amp;amp;&amp;amp; json !== 0) {&#13;&#10; txt &amp;#43;= &amp;#39;&amp;lt;span style=&amp;#34;color: Red;&amp;#34;&amp;gt;null&amp;lt;/span&amp;gt;&amp;#39;;&#13;&#10; } else if (typeof(json) == &amp;#34;object&amp;#34;) {&#13;&#10; var prefix = &amp;#39;&amp;lt;span style=&amp;#34;color: DarkGray; font-weight: bolder;&amp;#34;&amp;gt;{&amp;lt;/span&amp;gt;&amp;#39;, suffix = &amp;#39;&amp;lt;span style=&amp;#34;color: DarkGray; font-weight: bolder;&amp;#34;&amp;gt;}&amp;lt;/span&amp;gt;&amp;#39;;&#13;&#10; try {&#9;&#9;&#13;&#10; if (toString.call(json).match(/array/i)) {&#13;&#10; prefix = &amp;#39;&amp;lt;span style=&amp;#34;color: Orange;&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;#39;;&#13;&#10; suffix = &amp;#39;&amp;lt;span style=&amp;#34;color: Orange;&amp;#34;&amp;gt;]&amp;lt;/span&amp;gt;&amp;#39;;&#13;&#10; }&#13;&#10; } catch(e) {&#13;&#10; // hoho ...&#13;&#10; }&#13;&#10; &#13;&#10; if (json[rules.id]) {&#13;&#10; txt &amp;#43;= prefix &amp;#43; &amp;#34;此处引用 &amp;lt;a style=\&amp;#34;text-decoration: underline; color: Blue;\&amp;#34; href=\&amp;#34;#&amp;#34; &amp;#43; rules.id &amp;#43; &amp;#34;.&amp;#34; &amp;#43; json[rules.id] &amp;#43; &amp;#34;\&amp;#34; target=\&amp;#34;_self\&amp;#34; title=\&amp;#34;跳转到引用 &amp;#34; &amp;#43; json[rules.id] &amp;#43; &amp;#34;\&amp;#34; &amp;gt;&amp;#34; &amp;#43; &#13;&#10; json[rules.id] &amp;#43; &amp;#34;&amp;lt;/a&amp;gt;&amp;#34; &amp;#43; suffix;&#13;&#10; return txt;&#13;&#10; }&#13;&#10; json[rules.id] = path;&#13;&#10; rules.objs.push(json);&#13;&#10; &#13;&#10; txt &amp;#43;= prefix &amp;#43; &amp;#34;&amp;lt;br /&amp;gt;\r\n&amp;#34;;&#13;&#10; var first = true;&#13;&#10; for (var key in json) {&#13;&#10; if (key == rules.id)&#13;&#10; continue;&#13;&#10; &#13;&#10; if (first)&#13;&#10; first = false;&#13;&#10; else&#13;&#10; txt &amp;#43;= &amp;#34;,&amp;lt;br /&amp;gt;\r\n&amp;#34;;&#13;&#10; txt &amp;#43;= tabStr &amp;#43; &amp;#34;&amp;lt;a name=\&amp;#34;&amp;#34; &amp;#43; rules.id &amp;#43; &amp;#34;.&amp;#34; &amp;#43; path &amp;#43; &amp;#34;.&amp;#34; &amp;#43; key &amp;#43; &amp;#34;\&amp;#34;&amp;gt; &amp;lt;/a&amp;gt;&amp;#34; &amp;#43; &amp;#34;&amp;lt;strong&amp;gt;&amp;#34; &amp;#43; &#13;&#10; key &amp;#43; &amp;#34;&amp;lt;/strong&amp;gt; : &amp;#34; &amp;#43;&#9;json2String(json[key], tab &amp;#43; 1, rules, path &amp;#43; &amp;#34;.&amp;#34; &amp;#43; key);&#13;&#10; }&#13;&#10; txt &amp;#43;= &amp;#34;&amp;lt;br /&amp;gt;\r\n&amp;#34; &amp;#43; tabStr.substr(0, tabStr.length - singleTab.length) &amp;#43; suffix;&#13;&#10; } else if (typeof(json) == &amp;#34;string&amp;#34;) {&#13;&#10; txt &amp;#43;= &amp;#39;&amp;lt;span style=&amp;#34;color: Green;&amp;#34;&amp;gt;&amp;#34;&amp;#39; &amp;#43; json &amp;#43; &amp;#39;&amp;#34;&amp;lt;/span&amp;gt;&amp;#39;;&#13;&#10; } else if (typeof(json) == &amp;#34;number&amp;#34;) {&#13;&#10; txt &amp;#43;= &amp;#39;&amp;lt;span style=&amp;#34;color: Blue;&amp;#34;&amp;gt;&amp;#39; &amp;#43; json &amp;#43; &amp;#39;&amp;lt;/span&amp;gt;&amp;#39;;&#13;&#10; } else if (typeof(json) == &amp;#34;function&amp;#34;) {&#13;&#10; txt &amp;#43;= &amp;#39;&amp;lt;span style=&amp;#34;color: Purple;&amp;#34;&amp;gt;&amp;#39; &amp;#43; json &amp;#43; &amp;#39;&amp;lt;/span&amp;gt;&amp;#39;;&#13;&#10; } else {&#13;&#10; txt &amp;#43;= json.toString();&#13;&#10; }&#13;&#10; &#13;&#10; if (isClear) {&#13;&#10; for (var i = 0; i &amp;lt; rules.objs.length; &amp;#43;&amp;#43; i) {&#13;&#10; delete rules.objs[i][rules.id];&#13;&#10; }&#13;&#10; rules.objs = [];&#13;&#10; }&#13;&#10; &#13;&#10; return txt;&#13;&#10;}&#13;&#10; &#13;&#10;function showJson(json, title, windowName, dlg_opt) {&#13;&#10; json2String.baseIndex = json2String.baseIndex || 0;&#13;&#10; &#13;&#10; title = title || &amp;#34;Json viewer&amp;#34;;&#13;&#10; windowName = windowName || &amp;#34;result&amp;#34; &amp;#43; (new Date()).toGMTString();&#13;&#10; if (window.jQuery &amp;amp;&amp;amp; jQuery.fn &amp;amp;&amp;amp; jQuery.fn.dialog) {&#13;&#10; $(&amp;#34;&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;&amp;#34;).append(json2String(json)).css({&#13;&#10; &amp;#34;text-align&amp;#34;: &amp;#34;left&amp;#34;&#13;&#10; }).dialog($.extend({&#13;&#10; &amp;#34;modal&amp;#34;: false,&#13;&#10; &amp;#34;title&amp;#34;: title,&#13;&#10; &amp;#34;width&amp;#34;: 640,&#13;&#10; &amp;#34;height&amp;#34;: 480,&#13;&#10; &amp;#34;buttons&amp;#34;: {&#13;&#10; &amp;#34;关闭&amp;#34;: function() {&#13;&#10; $( this ).dialog( &amp;#34;close&amp;#34; );&#13;&#10; }&#13;&#10; }&#13;&#10; }, dlg_opt));&#13;&#10; } else {&#13;&#10; var wnd = window.open(&amp;#34;about:blank&amp;#34;, &amp;#34;_blank&amp;#34;, &amp;#34;height=600, width=800, toolbar=no, menubar=no, resizable=yes, location=no, status=no&amp;#34;, true);&#13;&#10; if (!wnd)&#13;&#10; alert(&amp;#34;窗口被拦截！&amp;#34;);&#13;&#10; wnd.document.write(&amp;#34;&amp;lt;!DOCTYPE html&amp;gt;&amp;lt;html&amp;gt;&amp;lt;head&amp;gt;&amp;lt;title&amp;gt;&amp;#34; &amp;#43; title &amp;#43; &amp;#34;&amp;lt;/title&amp;gt;&amp;lt;/head&amp;gt;&amp;lt;body&amp;gt;&amp;#34; &amp;#43; json2String(json) &amp;#43; &amp;#34;&amp;lt;/body&amp;gt;&amp;lt;/html&amp;gt;&amp;#34;);&#13;&#10; }&#13;&#10; return wnd;&#13;&#10;}&lt;/code&gt;&lt;/pre&gt;&#13;&#10;&lt;ol&gt;&#10;&lt;li&gt;更新对不同类型着色&lt;/li&gt;&#10;&lt;li&gt;如果载入了jQuery UI 则使用jQuery UI的Dialog打开，用于解决嵌套iframe时浏览器拦截问题&lt;/li&gt;&#10;&lt;li&gt;解决Object循环引用时栈溢出问题，同时增加引用的指向锚点&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;p&gt;Licensed under the MIT or GPL Version 3 licenses.&lt;/p&gt;</description></item></channel></rss>