`

查看JSON对象结构

    博客分类:
  • Ajax
阅读更多

在使用DWR时我们经常需要返回一个复杂的java对象,对于这个复杂的java对象,在客户端查看其结构可是一个大问题,尤其是引用层次很深的时候,如a.b.c.d等

   下面提供了一种方法,在网页上构建一个tree,把每个属性转换成一个node,这样便可以顺利的查看对象结构

下面是代码:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GB18030">
<title>xxx Test </title>
<style type="text/css">
#result{
	background-color: #eee;
	padding: 3px 8px 3px 10px;
	border-bottom: 1px solid gray;
	font: 11px Verdana, Geneva, Arial, Helvetica, sans-serif;
	color: silver;
}

</style>
 <!-- Yahoo tree dependency -->
<link type="text/css" rel="stylesheet" href="js-lib/treeview/assets/skins/sam/treeview.css">
<script src = "js-lib/yahoo/yahoo-min.js" ></script>
<script src = "js-lib/event/event-min.js" ></script>
<script src = "js-lib/treeview/treeview-min.js" ></script>
  <!-- DWR dependency -->
<script type='text/javascript' src='dwr/interface/XXXSrv.js'></script>
<script type='text/javascript' src='dwr/engine.js'></script>
<script type='text/javascript' src='dwr/util.js'></script>
  <!-- JSON dependency -->
<script type='text/javascript' src='js/json2.js'></script>
<script type="text/javascript">
    var tree;  
	function printObjectTree(Obj,Node){
 
		for(attr in Obj){
			var value=Obj[attr];
			var type=typeof(value);

			if(type =='object'){
			  	var tmpNode = new YAHOO.widget.TextNode(attr, Node, true);
				printObjectTree(value,tmpNode);
			}else{
			    var result=attr+':'+ value;
			    var tmpNode = new YAHOO.widget.TextNode(result, Node, false);
				
			}
		}
		
	}
	function parseObj(Obj){
		var text=JSON.stringify(Obj);
		return text;
	}
	 function callback(msg){
	 	//show result in plain text
	     var text=parseObj(msg);
	     document.getElementById('result').innerHTML=text;	 
	     
	     //show result in tree format
	 	 tree=new YAHOO.widget.TreeView("tree")
	 	 var root = tree.getRoot();
	 	 //build the tree  
	 	 printObjectTree(msg,root);
	     //draw tree	     
	     tree.draw();
	 } 
	function getViewByIDTest(){
		 var viewID = $('viewID').value;  
		 XXX.getViewByID(viewID,callback);
	}
	function getViewByIdReloadTest(){
		 var viewID = $('viewID').value;  
		XXX.getViewByIdReload(viewID,true,callback);
	}	
	function getRootViewByAppTest(){
		 var rootView = $('rootView').value;  
		 XXX.getRootViewByApp(rootView,callback);
	}
	function getAllViewsTest(){
		 var allView = $('allView').value;  
		 XXX.getAllViews(allView,callback);
	}
	function getSubViewsTest(){
		 var subView = $('subView').value;  
		 XXX.getSubViews(subView,callback);
	}	
	function getVisibleSubViewsTest(){
		 var visibleSubView = $('visibleSubView').value;  
		 XXX.getVisibleSubViews(visibleSubView,callback);
	}	
</script>
</head>
<body onload='dwr.util.useLoadingMessage()'>
<h1>This page is for XXX Test Only</h1>
<table>
	<tr>
		<td><input id="viewID" name="viewID" value="tableView" type="text" /></td>
		<td><input type='button' value='getViewByID'
			onclick='getViewByIDTest();' /></td>
	</tr>
	<tr>
		<td><input id="viewID" name="viewID" value="tableView" type="text" /></td>
		<td><input type='button' value='getViewByIdReload'
			onclick='getViewByIdReloadTest();' /></td>
	</tr>	
	<tr>
		<td><input id="rootView" name="rootView" value="SmartKYC" type="text" /></td>
		<td><input type='button' value='getRootViewByApp'
			onclick='getRootViewByAppTest();' /></td>
	</tr>	
	<tr>
		<td><input id="allView" name="allView"  type="text" /></td>
		<td><input type='button' value='getAllViews'
			onclick='getAllViewsTest();' /></td>
	</tr>		
	<tr>
		<td><input id="subView" name="subView" value="SmarKYC_Case"  type="text" /></td>
		<td><input type='button' value='getSubViews'
			onclick='getSubViewsTest();' /></td>
	</tr>	
	<tr>
		<td><input id="visibleSubView" name="visibleSubView" value="SmarKYC_Case"  type="text" /></td>
		<td><input type='button' value='getVisibleSubViews'
			onclick='getVisibleSubViewsTest();' /></td>
	</tr>		
</table>
<div id="result"></div>
<div id="tree"></div>
</body>
</html>

 JSON2.js是用于将javascript对象转换成json text的,可以从http://www.JSON.org/js.html 下载,下面也给出其源代码:

/*
    http://www.JSON.org/json2.js
    2008-07-15

    Public Domain.

    NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.

    See http://www.JSON.org/js.html

    This file creates a global JSON object containing two methods: stringify
    and parse.

        JSON.stringify(value, replacer, space)
            value       any JavaScript value, usually an object or array.

            replacer    an optional parameter that determines how object
                        values are stringified for objects. It can be a
                        function or an array.

            space       an optional parameter that specifies the indentation
                        of nested structures. If it is omitted, the text will
                        be packed without extra whitespace. If it is a number,
                        it will specify the number of spaces to indent at each
                        level. If it is a string (such as '\t' or ' '),
                        it contains the characters used to indent at each level.

            This method produces a JSON text from a JavaScript value.

            When an object value is found, if the object contains a toJSON
            method, its toJSON method will be called and the result will be
            stringified. A toJSON method does not serialize: it returns the
            value represented by the name/value pair that should be serialized,
            or undefined if nothing should be serialized. The toJSON method
            will be passed the key associated with the value, and this will be
            bound to the object holding the key.

            For example, this would serialize Dates as ISO strings.

                Date.prototype.toJSON = function (key) {
                    function f(n) {
                        // Format integers to have at least two digits.
                        return n < 10 ? '0' + n : n;
                    }

                    return this.getUTCFullYear()   + '-' +
                         f(this.getUTCMonth() + 1) + '-' +
                         f(this.getUTCDate())      + 'T' +
                         f(this.getUTCHours())     + ':' +
                         f(this.getUTCMinutes())   + ':' +
                         f(this.getUTCSeconds())   + 'Z';
                };

            You can provide an optional replacer method. It will be passed the
            key and value of each member, with this bound to the containing
            object. The value that is returned from your method will be
            serialized. If your method returns undefined, then the member will
            be excluded from the serialization.

            If the replacer parameter is an array, then it will be used to
            select the members to be serialized. It filters the results such
            that only members with keys listed in the replacer array are
            stringified.

            Values that do not have JSON representations, such as undefined or
            functions, will not be serialized. Such values in objects will be
            dropped; in arrays they will be replaced with null. You can use
            a replacer function to replace those with JSON values.
            JSON.stringify(undefined) returns undefined.

            The optional space parameter produces a stringification of the
            value that is filled with line breaks and indentation to make it
            easier to read.

            If the space parameter is a non-empty string, then that string will
            be used for indentation. If the space parameter is a number, then
            the indentation will be that many spaces.

            Example:

            text = JSON.stringify(['e', {pluribus: 'unum'}]);
            // text is '["e",{"pluribus":"unum"}]'


            text = JSON.stringify(['e', {pluribus: 'unum'}], null, '\t');
            // text is '[\n\t"e",\n\t{\n\t\t"pluribus": "unum"\n\t}\n]'

            text = JSON.stringify([new Date()], function (key, value) {
                return this[key] instanceof Date ?
                    'Date(' + this[key] + ')' : value;
            });
            // text is '["Date(---current time---)"]'


        JSON.parse(text, reviver)
            This method parses a JSON text to produce an object or array.
            It can throw a SyntaxError exception.

            The optional reviver parameter is a function that can filter and
            transform the results. It receives each of the keys and values,
            and its return value is used instead of the original value.
            If it returns what it received, then the structure is not modified.
            If it returns undefined then the member is deleted.

            Example:

            // Parse the text. Values that look like ISO date strings will
            // be converted to Date objects.

            myData = JSON.parse(text, function (key, value) {
                var a;
                if (typeof value === 'string') {
                    a =
/^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}(?:\.\d*)?)Z$/.exec(value);
                    if (a) {
                        return new Date(Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4],
                            +a[5], +a[6]));
                    }
                }
                return value;
            });

            myData = JSON.parse('["Date(09/09/2001)"]', function (key, value) {
                var d;
                if (typeof value === 'string' &&
                        value.slice(0, 5) === 'Date(' &&
                        value.slice(-1) === ')') {
                    d = new Date(value.slice(5, -1));
                    if (d) {
                        return d;
                    }
                }
                return value;
            });


    This is a reference implementation. You are free to copy, modify, or
    redistribute.

    This code should be minified before deployment.
    See http://javascript.crockford.com/jsmin.html

    USE YOUR OWN COPY. IT IS EXTREMELY UNWISE TO LOAD CODE FROM SERVERS YOU DO
    NOT CONTROL.
*/

/*jslint evil: true */

/*global JSON */

/*members "", "\b", "\t", "\n", "\f", "\r", "\"", JSON, "\\", call,
    charCodeAt, getUTCDate, getUTCFullYear, getUTCHours, getUTCMinutes,
    getUTCMonth, getUTCSeconds, hasOwnProperty, join, lastIndex, length,
    parse, propertyIsEnumerable, prototype, push, replace, slice, stringify,
    test, toJSON, toString
*/

if (!this.JSON) {

// Create a JSON object only if one does not already exist. We create the
// object in a closure to avoid creating global variables.

    JSON = function () {

        function f(n) {
            // Format integers to have at least two digits.
            return n < 10 ? '0' + n : n;
        }

        Date.prototype.toJSON = function (key) {

            return this.getUTCFullYear()   + '-' +
                 f(this.getUTCMonth() + 1) + '-' +
                 f(this.getUTCDate())      + 'T' +
                 f(this.getUTCHours())     + ':' +
                 f(this.getUTCMinutes())   + ':' +
                 f(this.getUTCSeconds())   + 'Z';
        };

        String.prototype.toJSON =
        Number.prototype.toJSON =
        Boolean.prototype.toJSON = function (key) {
            return this.valueOf();
        };

        var cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
            escapeable = /[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
            gap,
            indent,
            meta = {    // table of character substitutions
                '\b': '\\b',
                '\t': '\\t',
                '\n': '\\n',
                '\f': '\\f',
                '\r': '\\r',
                '"' : '\\"',
                '\\': '\\\\'
            },
            rep;


        function quote(string) {

// If the string contains no control characters, no quote characters, and no
// backslash characters, then we can safely slap some quotes around it.
// Otherwise we must also replace the offending characters with safe escape
// sequences.

            escapeable.lastIndex = 0;
            return escapeable.test(string) ?
                '"' + string.replace(escapeable, function (a) {
                    var c = meta[a];
                    if (typeof c === 'string') {
                        return c;
                    }
                    return '\\u' + ('0000' +
                            (+(a.charCodeAt(0))).toString(16)).slice(-4);
                }) + '"' :
                '"' + string + '"';
        }


        function str(key, holder) {

// Produce a string from holder[key].

            var i,          // The loop counter.
                k,          // The member key.
                v,          // The member value.
                length,
                mind = gap,
                partial,
                value = holder[key];

// If the value has a toJSON method, call it to obtain a replacement value.

            if (value && typeof value === 'object' &&
                    typeof value.toJSON === 'function') {
                value = value.toJSON(key);
            }

// If we were called with a replacer function, then call the replacer to
// obtain a replacement value.

            if (typeof rep === 'function') {
                value = rep.call(holder, key, value);
            }

// What happens next depends on the value's type.

            switch (typeof value) {
            case 'string':
                return quote(value);

            case 'number':

// JSON numbers must be finite. Encode non-finite numbers as null.

                return isFinite(value) ? String(value) : 'null';

            case 'boolean':
            case 'null':

// If the value is a boolean or null, convert it to a string. Note:
// typeof null does not produce 'null'. The case is included here in
// the remote chance that this gets fixed someday.

                return String(value);

// If the type is 'object', we might be dealing with an object or an array or
// null.

            case 'object':

// Due to a specification blunder in ECMAScript, typeof null is 'object',
// so watch out for that case.

                if (!value) {
                    return 'null';
                }

// Make an array to hold the partial results of stringifying this object value.

                gap += indent;
                partial = [];

// If the object has a dontEnum length property, we'll treat it as an array.

                if (typeof value.length === 'number' &&
                        !(value.propertyIsEnumerable('length'))) {

// The object is an array. Stringify every element. Use null as a placeholder
// for non-JSON values.

                    length = value.length;
                    for (i = 0; i < length; i += 1) {
                        partial[i] = str(i, value) || 'null';
                    }

// Join all of the elements together, separated with commas, and wrap them in
// brackets.

                    v = partial.length === 0 ? '[]' :
                        gap ? '[\n' + gap +
                                partial.join(',\n' + gap) + '\n' +
                                    mind + ']' :
                              '[' + partial.join(',') + ']';
                    gap = mind;
                    return v;
                }

// If the replacer is an array, use it to select the members to be stringified.

                if (rep && typeof rep === 'object') {
                    length = rep.length;
                    for (i = 0; i < length; i += 1) {
                        k = rep[i];
                        if (typeof k === 'string') {
                            v = str(k, value);
                            if (v) {
                                partial.push(quote(k) + (gap ? ': ' : ':') + v);
                            }
                        }
                    }
                } else {

// Otherwise, iterate through all of the keys in the object.

                    for (k in value) {
                        if (Object.hasOwnProperty.call(value, k)) {
                            v = str(k, value);
                            if (v) {
                                partial.push(quote(k) + (gap ? ': ' : ':') + v);
                            }
                        }
                    }
                }

// Join all of the member texts together, separated with commas,
// and wrap them in braces.

                v = partial.length === 0 ? '{}' :
                    gap ? '{\n' + gap + partial.join(',\n' + gap) + '\n' +
                            mind + '}' : '{' + partial.join(',') + '}';
                gap = mind;
                return v;
            }
        }

// Return the JSON object containing the stringify and parse methods.

        return {
            stringify: function (value, replacer, space) {

// The stringify method takes a value and an optional replacer, and an optional
// space parameter, and returns a JSON text. The replacer can be a function
// that can replace values, or an array of strings that will select the keys.
// A default replacer method can be provided. Use of the space parameter can
// produce text that is more easily readable.

                var i;
                gap = '';
                indent = '';

// If the space parameter is a number, make an indent string containing that
// many spaces.

                if (typeof space === 'number') {
                    for (i = 0; i < space; i += 1) {
                        indent += ' ';
                    }

// If the space parameter is a string, it will be used as the indent string.

                } else if (typeof space === 'string') {
                    indent = space;
                }

// If there is a replacer, it must be a function or an array.
// Otherwise, throw an error.

                rep = replacer;
                if (replacer && typeof replacer !== 'function' &&
                        (typeof replacer !== 'object' ||
                         typeof replacer.length !== 'number')) {
                    throw new Error('JSON.stringify');
                }

// Make a fake root object containing our value under the key of ''.
// Return the result of stringifying the value.

                return str('', {'': value});
            },


            parse: function (text, reviver) {

// The parse method takes a text and an optional reviver function, and returns
// a JavaScript value if the text is a valid JSON text.

                var j;

                function walk(holder, key) {

// The walk method is used to recursively walk the resulting structure so
// that modifications can be made.

                    var k, v, value = holder[key];
                    if (value && typeof value === 'object') {
                        for (k in value) {
                            if (Object.hasOwnProperty.call(value, k)) {
                                v = walk(value, k);
                                if (v !== undefined) {
                                    value[k] = v;
                                } else {
                                    delete value[k];
                                }
                            }
                        }
                    }
                    return reviver.call(holder, key, value);
                }


// Parsing happens in four stages. In the first stage, we replace certain
// Unicode characters with escape sequences. JavaScript handles many characters
// incorrectly, either silently deleting them, or treating them as line endings.

                cx.lastIndex = 0;
                if (cx.test(text)) {
                    text = text.replace(cx, function (a) {
                        return '\\u' + ('0000' +
                                (+(a.charCodeAt(0))).toString(16)).slice(-4);
                    });
                }

// In the second stage, we run the text against regular expressions that look
// for non-JSON patterns. We are especially concerned with '()' and 'new'
// because they can cause invocation, and '=' because it can cause mutation.
// But just to be safe, we want to reject all unexpected forms.

// We split the second stage into 4 regexp operations in order to work around
// crippling inefficiencies in IE's and Safari's regexp engines. First we
// replace the JSON backslash pairs with '@' (a non-JSON character). Second, we
// replace all simple value tokens with ']' characters. Third, we delete all
// open brackets that follow a colon or comma or that begin the text. Finally,
// we look to see that the remaining characters are only whitespace or ']' or
// ',' or ':' or '{' or '}'. If that is so, then the text is safe for eval.

                if (/^[\],:{}\s]*$/.
test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, '@').
replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']').
replace(/(?:^|:|,)(?:\s*\[)+/g, ''))) {

// In the third stage we use the eval function to compile the text into a
// JavaScript structure. The '{' operator is subject to a syntactic ambiguity
// in JavaScript: it can begin a block or an object literal. We wrap the text
// in parens to eliminate the ambiguity.

                    j = eval('(' + text + ')');

// In the optional fourth stage, we recursively walk the new structure, passing
// each name/value pair to a reviver function for possible transformation.

                    return typeof reviver === 'function' ?
                        walk({'': j}, '') : j;
                }

// If the text is not JSON parseable, then a SyntaxError is thrown.

                throw new SyntaxError('JSON.parse');
            }
        };
    }();
}

 

另外一些yui的js需要自己下载。

 

 

分享到:
评论

相关推荐

    java解析xml生成json对象

    java解析xml文件生成json对象,方便操作,下载后导入eclipse,加入相关的jar包后加载至类路径便可测试该工具类,很好用!!!

    纯javascript实现json与对象的互相转换项目

    纯javascript实现json与对象的互相转换完整项目,原创

    Struts2返回JSON对象的方法总结完整实例

    如果是作为客户端的...本人碰到需要用开发基于Struts2的HTTP+JSON返回类型接口就是基于既定框架结构下进行的。 Struts2返回JSON有两种方式:1.使用Servlet的输出流写入JSON字符串;2.使用Struts2对JSON的扩展。

    transform-json:简单转换 JSON 对象结构

    转换 JSON 简单转换 JSON 对象结构。 轻松重命名 JSON 键。为什么? 该节点模块的第一个目标是修改和维护的许多翻译文件的结构。 请注意,输入文件的值永远不会改变,但结构信息会改变。在您的节点项目中使用它 npm ...

    JSON字符串和JSON对象相互转化实例详解

    本文实例讲述了JSON字符串和JSON对象相互转化的方法。分享给大家供大家参考,具体如下: 将json字符串转换为json对象的方法。在数据传输过程中,json是以文本,即字符串的形式传递的,而JS操作的是JSON对象,所以,...

    json viewer(json格式化和查看工具) v1.2 免费版.zip

    json viewer中文版支持JSON字符串查看和格式化,将功能合二为一,使用起来非常的方便,以前觉得json可读性差的朋友可以下载这个工具试一试。...4、JSON Viewer支持插件允许您自定义的方式显示JSON对象。

    C# 获取json字段中指定值

    C# 获取json字段中指定的值,省去写对象的烦恼,从而提升了代码的可读性,加速了json格式数据的解析和管理,直接调用有用的数据

    c#两种简单的json类和对象的序列化和解析

    c#两种简单的json类和对象的序列化和解析。一种使用Hashtable序列化和解析;一种使用实体类序列化和解析。需要借助第三方Newtonsoft.Json.dll。

    论文研究-一个基于JSON的对象序列化算法.pdf

    提出了一种基于JSON的对象序列化算法,该算法通过分析JSON文法并建立对象导航图,透明地将Java对象序列化成JSON表达式,使客户端能够很好地利用JavaScript引擎来解析JSON响应,有效地解决了解析XML所造成的缺陷。

    json-20230227.jar下载

    json-20230227.jar下载,org.json是一款 veteran 的 Java JSON 处理库。它提供了一组简单的 Java APIs 来处理 JSON,简化了 Java...5. 支持嵌套 JSON 对象:org.json 支持解析嵌套的 JSON 对象结构。 6. 双向转换:org.jso

    JSON数据结构特点及Java解析JSON的方法

    目录JSON数据结构简介JSON 表示对象JSON 格式表示数组JSON嵌套JSON数据嵌套1JSON数据嵌套2JSON数据嵌套3 JSON数据结构简介 JSON数据结构一种与开发语言无关的、轻量级的数据存储格式,全称JavaScript Object ...

    将内嵌JSON结构映射到PHP类上的库.zip

    JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式。它基于 ECMAScript (w3c制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 ...

    【JavaScript源代码】替换json对象中的key最佳方案.docx

    替换json对象中的key最佳方案  JSON(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式。它基于 ECMAScript (欧洲计算机协会制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储...

    json2 js json格式处理包

    在当前的浏览器上,这个文件什么都不做,更喜欢内置的JSON对象。没有理由使用这个文件,除非命运迫使你支持IE8,这是没有人应该再次做的事情。 cycle.js:这个文件包含两个函数,JSON.decycle和JSON。retrocycle,它...

    jquery.json-viewer, 用于显示JSON数据的jQuery插件.zip

    jquery.json-viewer, 用于显示JSON数据的jQuery插件 jQuery浏览器JSON浏览器是一个jQuery插件,它可以通过将JSON对象转化为HTML来轻松显示JSON对象。功能:语法高亮显示在单击时折叠和展开子节点可以点击链接易于...

    C#Json插件 Newtonsoft.Json,json.net

    C#Json插件 Newtonsoft.Json/json.net 这是一个可以用于.NET的Json辅助工具类。它可以将对对象序列化为json字符串

    json-structure-diff:比较JSON对象以获取结构相等性,尽管实际内容有所不同

    比较JSON对象以获取结构相等性,尽管实际内容有所不同 安装 npm install --save json-structure-diff 或者 bower install --save json-structure-diff 用法 NPM: var compare = require ( 'json-structure-diff' ...

    JS操作xml对象转换为Json对象示例

    最近在处理一个前端功能的时候,遇到了一个问题,原本的系统是使用的xml来存储数据的,而在新的系统上,想要转换为json对象存储,于是就考虑到直接将xml对象转换为json对象。 目前为止,通用的转换方式我还没有找到...

    编译原理json解析器

    完成json 基本结构(键值对、对象、数组、字符串)的解析, 完成对true、false、null、整数的解析, 完成浮点数的解析; 完成科学计数法表示的数的解析; 完成json 文本的格式化。添加一个命令行参数-pretty,对于...

    asp数据集输出json格式数据,也可以多重嵌套的JSON

    工具数据库已包含,只需在iis挂上网站站点,然后修改根目录下的ajaxShow.html的66行,url修改成自己的站点网址,就可以测试

Global site tag (gtag.js) - Google Analytics