浅谈JSON中stringify 函数、toJosn函数和parse函数
JSON.stringify函数(JavaScript)
语法:JSON.stringify(value[,replacer][,space])
将JavaScript值转换为JavaScript对象表示法(Json)字符串。
value 必需。要转换的JavaScript值(通常为对象或数组)。 replacer 可选。用于转换结果的函数或数组。 如果replacer为函数,则JSON.stringify将调用该函数,并传入每个成员的键和值。使用返回值而不是原始值。如果此函数返回undefined,则排除成员。根对象的键是一个空字符串:""。 如果replacer是一个数组,则仅转换该数组中具有键值的成员。成员的转换顺序与键在数组中的顺序一样。当value参数也为数组时,将忽略replacer数组。 space 可选。向返回值JSON文本添加缩进、空格和换行符以使其更易于读取。 如果省略space,则将生成返回值文本,而没有任何额外空格。 如果space是一个数字,则返回值文本在每个级别缩进指定数目的空格。如果space大于10,则文本缩进10个空格。 如果space是一个非空字符串(例如“\t”),则返回值文本在每个级别中缩进字符串中的字符。 如果space是长度大于10个字符的字符串,则使用前10个字符。
如果value具有toJSON方法,则JSON.stringify函数将使用该方法的返回值。如果toJSON方法的返回值为undefined,则不转换成员。这使对象能够确定自己的JSON表示形式。
将不会转换不具有JSON表示形式的值,例如undefined。在对象中,将丢弃这些值。在数组中,会将这些值替换为null。
执行顺序
在序列化过程中,如果value参数对应有toJSON方法,则JSON.stringify将首先调用toJSON方法。如果该方法不存在,则使用原始值。接下来,如果提供replacer参数,则该值(原始值或toJSON返回值)将替换为replacer参数的返回值。最后,根据可选space参数向该值添加空格以生成最终的JSON文本。
此示例使用JSON.stringify将contact对象转换为JSON文本。定义memberfilter数组以便只转换surname和phone成员。省略firstname成员。
varcontact=newObject(); contact.firstname="Jesper"; contact.surname="Aaberg"; contact.phone=["555-0100","555-0120"]; varmemberfilter=newArray(); memberfilter[0]="surname"; memberfilter[1]="phone"; varjsonText=JSON.stringify(contact,memberfilter,"\t"); document.write(jsonText); //Output: //{"surname":"Aaberg","phone":["555-0100","555-0120"]}
toJSON方法(Date)(JavaScript)
语法:objectname.toJSON()
objectname
必需。需要进行JSON序列化的对象。
toJSON方法是DateJavaScript对象的内置成员。它返回UTC时区的ISO格式日期字符串(由后缀Z表示)。
以下示例使用toJSON方法将大写的字符串成员值序列化。在调用JSON.stringify时调用toJSON方法。
JavaScript varcontact=newObject(); contact.firstname="Jesper"; contact.surname="Aaberg"; contact.phone=["555-0100","555-0120"]; contact.toJSON=function(key) { varreplacement=newObject(); for(varvalinthis) { if(typeof(this[val])==='string') replacement[val]=this[val].toUpperCase(); else replacement[val]=this[val] } returnreplacement; }; varjsonText=JSON.stringify(contact); /*ThevalueofjsonTextis: '{"firstname":"JESPER","surname":"AABERG","phone":["555-0100","555-0120"]}' */
JSON.parse函数(JavaScript)
将JavaScript对象表示法(JSON)字符串转换为对象
语法:JSON.parse(text[,reviver])
text 必需。一个有效的JSON字符串。 reviver 可选。一个转换结果的函数。将为对象的每个成员调用此函数。如果成员包含嵌套对象,则先于父对象转换嵌套对象。对于每个成员,会发生以下情况: 如果reviver返回一个有效值,则成员值将替换为转换后的值。 如果reviver返回它接收的相同值,则不修改成员值。 如果reviver返回null或undefined,则删除成员。
以下示例使用JSON.parse将JSON字符串转换成对象。
varjsontext='{"firstname":"Jesper","surname":"Aaberg","phone":["555-0100","555-0120"]}'; varcontact=JSON.parse(jsontext); document.write(contact.surname+","+contact.firstname); //Output:Aaberg,Jesper
以下示例演示了如何使用JSON.stringify将数组转换成JSON字符串,然后使用JSON.parse将该字符串重新转换成数组。
vararr=["a","b","c"]; varstr=JSON.stringify(arr); document.write(str); document.write("<br/>"); varnewArr=JSON.parse(str); while(newArr.length>0){ document.write(newArr.pop()+"<br/>"); } //Output: //["a","b","c"] //c //b //a