`

查看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需要自己下载。

 

 

分享到:
评论

相关推荐

    JS中Json对象

    ### JS中Json对象 #### JSON概述 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。JSON是基于JavaScript的一个子集,采用完全独立于编程语言的文本...

    asp输出json对象实例

    在ASP(Active Server Pages)中,JSON对象的处理通常是通过脚本语言,如VBScript,来实现的。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它基于JavaScript的一个子集,易于人阅读和编写,同时也...

    经典ASP读取JSON字符串/生成JSON对象,数组对象等。

    1. **JSON对象与数组的结构**: JSON对象以大括号{}表示,键值对之间用逗号分隔。键必须是字符串,用双引号包围。例如:`{"name": "John", "age": 30}`。数组则用方括号[]表示,元素间以逗号分隔,如:`["apple", ...

    feature转化为Json对象

    "Feature 转化为 Json 对象" 在 GIS 应用中,Feature 对象是非常重要的一种数据结构,用于描述空间要素的属性和几何信息。但是在实际应用中,我们需要将 Feature 对象转换为 Json 对象,以便在客户端进行处理和展示...

    asp字符串转json对象类

    但根据描述,这里的JSON对象转换后,其属性需要通过"obj("name")"的方式访问,这意味着转换后的对象不是标准的VBScript Collection或Dictionary对象,而是一种自定义的模拟JSON对象的结构。这样的设计可能是因为...

    拷贝JSON对象值进Java Bean对象

    首先,我们需要理解JSON对象的结构。JSON对象由键值对组成,键是字符串,值可以是各种数据类型,包括字符串、数字、数组、对象等。在Java中,我们通常使用`org.json`库或`com.google.gson`库来解析和创建JSON对象。 ...

    java解析xml生成json对象

    5. **理解实现**:深入理解工具类的代码,查看它是如何解析XML的,以及如何将XML节点映射到JSON对象。这可能涉及到XPath表达式来定位XML元素,以及JSON库提供的API来构建JSON结构。 在实际应用中,XML到JSON的转换...

    json字符串转换c++类对象

    总的来说,将JSON字符串转换为C++类对象需要选择合适的JSON库,设计类结构来映射JSON键值,解析JSON字符串,并利用库提供的功能将JSON对象转换为C++对象。在实际应用中,还需要注意错误处理和适应各种复杂的JSON结构...

    json 查看器,检查json结构,方便查看json

    2. **结构检查**:检查JSON对象的层次结构是否正确,如括号是否匹配,键值对是否完整。 3. **类型检查**:确认值的类型是否符合预期,例如,预期是一个对象而实际是一个字符串等。 至于压缩包中的文件"JsonView",...

    JSON查看器,结构化查看

    它是.NET社区中最流行、最全面的JSON库,提供了序列化和反序列化JSON的能力,支持JSON对象与.NET对象之间的转换,以及JSON的解析和生成。 2. JsonViewer.dll:这可能是JSON查看器的组件或插件,用于实现JSON数据的...

    JSON--List集合转换成JSON对象详解

    将List集合转换为JSON对象是数据处理中的一项基本技能,尤其在进行Web开发和数据交互时尤为重要。 上述内容主要介绍了如何将List集合转换为JSON对象。这一过程主要涉及以下几个方面的知识点: 1. 手动构建JSON对象...

    生成JSON树型表结构

    1. JSON数据的格式:JSON对象通常包含键值对,用于表示树的节点。对于树型结构,每个节点至少包含两个键——`text`(显示的文本)和`children`(子节点数组)。例如: ```json { "text": "父节点", "children": [ ...

    json转对象数组与对象数组转json --Java

    ### JSON转对象数组与对象数组转JSON(Java) 在Java编程语言中,处理JSON数据时经常需要进行JSON字符串与Java对象之间的转换。...通过这种方式,开发者可以更加灵活地处理各种复杂的JSON数据结构。

    用于java对象与json对象间的相互转换(net.sf.json.JSONObject)

    - **处理嵌套结构**:`JSONObject`也支持嵌套结构,即JSON对象内包含其他JSON对象或数组。可以通过递归或迭代的方式处理这些嵌套结构。 - **遍历JSON对象**:你可以使用`keys()`方法获取所有键,然后遍历获取值,如`...

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

    JSON是一种文本格式,主要由键值对组成,键用双引号包围,值可以是字符串、数字、布尔值、数组、null或者另一个JSON对象。例如: ```json { "name": "John", "age": 30, "city": "New York" } ``` 在这个项目中...

    JsonView查看JSON利器

    3. **展开/折叠节点**:用户可以轻松地展开或折叠JSON对象的各个层级,以便专注于感兴趣的特定部分,而不会被无关信息干扰。 4. **快速搜索**:JsonView通常提供搜索功能,允许用户快速定位到特定的键值,提高工作...

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

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

    模仿json,根据对象生成json字符串,根据字符串生成对象

    一个JSON对象以大括号`{}`包围,其内部由键值对组成,键用双引号`""`包裹,值可以是字符串、数字、布尔值、数组、null或另一个JSON对象。数组则用方括号`[]`表示,元素之间用逗号分隔。 生成JSON字符串通常涉及两个...

    json与对象相互转换系列处理

    在IT领域,JSON被广泛应用于Web服务和应用程序之间的数据传输,因为它的结构清晰,易于理解和处理。 在编程中,经常需要将JSON字符串转换为对象,或者将对象转换为JSON字符串。这个过程被称为序列化(将对象转换为...

Global site tag (gtag.js) - Google Analytics