JSON.parse(): 用于从一个字符串中解析出json对象

例如:var str = '{"name":"huangxiaojian","age":"23"}'

结果:

JSON.parse(str)
Object

    age: "23"
    name: "huangxiaojian"
    __proto__: Object

注意:单引号写在{}外,每个属性名都必须用双引号,否则会抛出异常。

 

stringify():用于从一个对象解析出字符串

例如:var a = {a:1,b:2}

结果:

JSON.stringify(a)

"{"a":1,"b":2}"

 

浏览器提供的JSON.parse

if ( datatype === "json" || !datatype && rhd.indexOf("json") >= 0 ) {
	data = anyjs.trim( data );
	//use the native JSON parser first
	return window.JSON && window.JSON.parse ? window.JSON.parse(data) : (new Function("return " + data))();
}

初学JSON,按照官方说明,在json2.js中有 parse 和 stringify 两个方法,parse用于从一个字符串中解析出json对象。举例说明:

1 		JSON.parse - chinazblz - VFP的初学家园 VFP的下载基地varstr = " {'name':'x', 'age':23}" ;
2 		JSON.parse - chinazblz - VFP的初学家园 VFP的下载基地 JSON.parse(str);

原来认为这肯定能够正确执行的,但是无论怎样写这个对象string,都抛出异常。后来发现原来是 " ' 导致的错误。如果改为:

1   var str = '{ " name " :" xskow " , "age " : 23 }';
2 		JSON.parse - chinazblz - VFP的初学家园 VFP的下载基地 JSON.parse(str);

就OK

还有就是我们写对象的时候一般可以{name:'xskow'},即属性名可以不用双引号括起来,但如果使用JSON.parse的话,每个属性都必须用双引号括起来,否则也会抛出异常。

例如下的代码:

function handle_success(response){       
	var json = eval(response); 
	// response = "{'foo' : 'bar'}";  
}

浏览器会报 invalid label 错,这是因为 eval会尝试将你的response解释为一个label,当你在脚本中直接写:

<script>  {'foo' : 'bar'};</script>

会报错的原理是一样的。

解决办法有俩个:

var json = eval('(' + response + ')'); // response = "{'foo' : 'bar'}";

或者

eval('var json = ' + response); // response = "{'foo' : 'bar'}";       //json is available now

 

JSON.parse 函数:将JSON文本转换为对象。
JSON.parse(text[, reviver])

text

   必选项。要转换为对象的JSON文本。

reviver

   可选项。该参数是个替换函数。在转换中,遍历的每个节点,都将执行该函数,该函数的返回值将替代转换结果的相应节点值。
 
JSON.stringify 函数:将对象转换为JSON文本。
JSON.stringify(value[, reviver[, space]])

text

必选项。要转换为JSON文本的对象。

reviver

   可选项。该参数是个替换函数。在转换中,遍历的每个节点,都将执行该函数,该函数的返回值将替代转换结果的相应节点值。

space

   可选项。格式化输出JSON文本缩进的空格数量。如果不提供该参数将不会格式化输出。
 
参数reviver的委托类型
reviver(key, value)

reviver 函数的中的this是当前所遍历到的节点的父节点。当所遍历的是根节点的时候,父节点是个Object对象,根节点是该对象的一个属性,属性名是空字符串。

key

   当父节点是数组Object,key为数组索引,否则key为Object属性名。

value

   节点值。

注:JSON不支持循环数据结构。