json主要的优势就是格式精简,相比较xml的话。一般用来作为数据传输,前后端进行数据传递。
现在流行的浏览器普遍支持JSON的两个方法,序列化和反序列化。
1. JSON.stringnify()
2. JSON.parse()
下边的示例就是这两个方法的常见用法。
注意一点:json这个两个方法,会忽视掉undefined的项目属性,比如key为test的项目被忽略掉。
var a; var person = { "fullname" : "Mr Xi", "wife" : "Miss Peng", "children" : ["Xi1", "Xi2"], "age" : 53, "test" : a }; console.log(a); // undefined var str = JSON.stringify(person);// 通常序列化后,可以传到后台 console.log(str);// {"fullname":"Mr Xi","wife":"Miss Peng","children":["Xi1","Xi2"],"age":53} var jobj = JSON.parse(str);// 从后台传到前台后,进行解析 console.log(jobj);
很多时候,我们大多数忽视了这两个方法的第二个参数。第二个参数主要用于过滤作用(可以是数组,或者是函数)。
当为数组的时候,传递json对象的keys,传递了则包含这个属性,否则过滤掉。
当为函数的时候,函数有两个参数分别是key和value,针对自己的业务进行处理,return undefined则不包含,否则返回value。
var str1 = JSON.stringify(person, ["fullname", "children"]); console.log(str1);// {"fullname":"Mr Xi","children":["Xi1","Xi2"]} var str2 = JSON.stringify(person, function(k,v){ if (k == "children"){ v.push("Xi3"); return v; } else if (k == "age"){ return undefined; } else { return v; } }); console.log(str2); // {"fullname":"Mr Xi","wife":"Miss Peng","children":["Xi1","Xi2","Xi3"]}