您的位置:首页 > Web前端 > JavaScript

JSON.parse() 方法与$.parseJSON()以及JSON.stringify()区别

2017-03-15 15:50 761 查看
1JSON.parse()

JSON.parse()
方法解析一个JSON字符串

参数

text
要被解析成JavaSctipt值的字符串
reviver
可选如果是一个函数,则规定了原始值如何被解析改造,在被返回之前。

返回值

对应给定的JSON文本。

2
jQuery.parseJSON()
函数

用于将格式完好的[b]JSON字符串转为与之对应的JavaScript对象[/b]。

所谓"格式完好",就是要求指定的字符串必须符合严格的JSON格式,例如:属性名称必须加双引号、字符串值也必须用双引号。

如果传入一个格式不"完好"的JSON字符串将抛出一个JS异常,

例如:以下字符串均符合JSON格式,但它们不是格式完好的JSON字符串(因此会抛出异常):

//以下均是字符串值,省略了两侧的引号,以便于展现内容

{id:1}//id是属性名称,必须加双引号
{'id':1}//id是属性名称,必须用双引号(不能用单引号)
{"name":'CodePlayer'}//name属性的值是字符串,必须用双引号(不能用单引号)

以下是与
jQuery.parseJSON()
函数相关的jQuery示例代码,以演示
jQuery.parseJSON()
函数的具体用法:

varresult1=$.parseJSON("{}");//一个空的Object对象

varresult2=$.parseJSON('{"name":"CodePlayer","age":1}');//一个Object对象
alert(result2.name);//CodePlayer

varresult3=$.parseJSON('[1,true,"CodePlayer"]');//一个Object对象
alert(result3[2]);//CodePlayer

varresult4=$.parseJSON('true');//布尔值:true

varresult5=$.parseJSON('null');//null

varresult6=$.parseJSON('0');//整数:0

varresult7=$.parseJSON('"专注于编程开发技术分享"');//字符串值:专注于编程开发技术分享

varresult8=$.parseJSON("\"专注于编程开发技术分享\"");//字符串值:专注于编程开发技术分享

/*以下均是无效的JSON字符串或非常规的参数值*/

varresult9=$.parseJSON(100);//1.9之前返回null;1.9+返回100
varresult10=$.parseJSON(1.23);//1.9之前返回null;1.9+返回1.23
varresult11=$.parseJSON(true);//1.9之前返回null;1.9+返回true
varresult12=$.parseJSON(null);//返回null

varresult13=$.parseJSON("");//1.9之前返回null;1.9+抛出错误
varresult14=$.parseJSON(undefined);//1.9之前返回null;1.9+抛出错误

varresult15=$.parseJSON("undefined");//抛出错误
varresult16=$.parseJSON("12x;xx'无效的JSON字符串x4546");//抛出错误
varresult17=$.parseJSON('{name:"CodePlayer",age:1}');//抛出错误
varresult18=$.parseJSON('{"name":\'CodePlayer\',"age":1}');//抛出错误
varresult19=$.parseJSON('{"name":"Code\tPlayer\n"}');//抛出错

3JSON.stringify()
[code]JSON.stringify()
方法将JavaScript值转换为JSON字符串

[/code]

返回值

一个表示给定值的JSON字符串。

描述EDIT

关于序列化,有下面五点注意事项:

非数组对象的属性不能保证以特定的顺序出现在序列化后的字符串中。

布尔值、数字、字符串的包装对象在序列化过程中会自动转换成对应的原始值。

undefined、
任意的函数以及symbol值,在序列化过程中会被忽略(出现在非数组对象的属性值中时)或者被转换成
null
(出现在数组中时)。

所有以symbol为属性键的属性都会被完全忽略掉,即便
replacer
参数中强制指定包含了它们。

不可枚举的属性会被忽略

[code;'>JSON.stringify({})]//'{}' JSON.stringify(true);//'true' JSON.stringify("foo");//'"foo"' JSON.stringify([1,"false",false]);//'[1,"false",false]' JSON.stringify({x:5});//'{"x":5}' JSON.stringify({x:5,y:6}); //"{"x":5,"y":6}" JSON.stringify([newNumber(1),newString("false"),newBoolean(false)]); //'[1,"false",false]' JSON.stringify({x:undefined,y:Object,z:Symbol("")}); //'{}' JSON.stringify([undefined,Object,Symbol("")]); //'[null,null,null]' JSON.stringify({[Symbol("foo")]:"foo"}); //'{}' JSON.stringify({[Symbol.for("foo")]:"foo"},[Symbol.for("foo")]); //'{}' JSON.stringify( {[Symbol.for("foo")]:"foo"}, function(k,v){ if(typeofk==="symbol"){ return"asymbol"; } } ); //undefined //不可枚举的属性默认会被忽略: JSON.stringify( Object.create( null, { x:{value:'x',enumerable:false}, y:{value:'y',enumerable:true} } ) );



                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: