# JSON是一种不仅限于JavaScript的数据格式
JSON语法:
JSON语法可以表示一下三种类型的值。
简单值:字符串、数值、布尔值、null,不支持undefined。
JSON格式:1、"hello"
对象:值可以是简单值或复杂的对象值。
JSON格式:
{ "name": "Rose", "age": 25 }
//和对象字面量形式不同的是:JSON对象没有声明变量、属性名必须加“”(双引号)且末尾没有分号
数组:值可以是任意类型。
JSON格式:
[ { "name":"student1", "age": 11 }, { "name":"student2", "age": 12 }
]
JSON解析与序列化
1、JSONstringify()的使用 :过滤器、字符串缩进和toJSON()方法
2、解析JSON.parse()方法
//定义一个对象 var person = { name: "nikol", age: "26", gender: "male", city: "tokyo", girlFriend: undefined } /* * 1、对象转换成JSON字符串 */ var jsonText1 = JSON.stringify(person); // alert(jsonText1);//忽略值为undefined 的 girlFirend属性 /* * 1.1、stringif()过滤器作用 (两个参数) * 例如:提取obj对象中的attr属性 * 语法:JSON0stringif(obj, ["attr1", "attr2",...]) * 第二个参数为一个字符串数组,它包含一个或多个对象属性字符串。 */ var jsonText11 = JSON.stringify(person, ["name", "age"]); // alert(jsonText11);//{"name":"nikol","age":"26"} //同样忽略值为undefined的属性 var jsonText111 = JSON.stringify(person, ["name", "age","girlFirend"]); // alert(jsonText111); /* * (自定义过滤)自定义对象序列化后的值(两个参数) * 例如:改变name和age属性的值分别为 "jso"和"undefined" * 语法: JSON.stringify(obj, function (key, value) { switch (key) { case "name": return "jso"; case "age": return "undefined"; default: return value; } }); */ var jsonText112 = JSON.stringify(person, function (key, value) { switch (key) { case "name": return "jso"; case "age": return "undefined"; default: return value; } }); // alert(jsonText112);//{"name":"jso","age":"undefined","gender":"male","city":"tokyo"} /* * 1.2、字符串缩进(三个参数) * 第二个参数为null,第三个参数代表缩进的空格数,或者字符串 */ //每级缩进4个空格(最大为10,超过10都自动转换为10) var jsonText12 = JSON.stringify(person,null,4); // alert(jsonText12); //以"--"代替缩进空格 var jsonText121 = JSON.stringify(person,null,"--"); // alert(jsonText121); /* * 1.3、toJson()方法 * 内部调用顺序: 1 --> 2 --> 3 * (1)、有toJSON()调用toJSON()没有则返回对象本身 * (2)、如果是两个参数的过滤器,则先过滤后再应用(1) (过滤器接收的值是(1)的返回值), * 然后再对这个(1)的返回值进行序列 * (3)、如果提供三个参数,则按照三个参数来进行对应的序列化; */ /* * 测试 toJSON()方法 */ var obj = { title: "this is a title ", paragraph: "this is paragraph ", } var obj1 = { title: "this is a title 1", paragraph: "this is paragraph 1", toJSON: function () { return this.title; } } //测试(1) var objJson = JSON.stringify(obj); var obj1Json = JSON.stringify(obj1); // alert(objJson); //{"title":"this is a title ","paragraph":"this is paragraph "} 返回对象本身 // alert(obj1Json);//"this is a title 1" 优先调用toJSON()方法 //测试(2) 过滤器 var objFilter = JSON.stringify(obj, ["paragraph"]) // alert(objFilter);//{"paragraph":"this is paragraph "} 正常过滤 var obj1Filter = JSON.stringify(obj1, ["paragraph"]); // alert(obj1Filter);//"this is a title 1" 调用toJSON() //测试(3) var obj3Filter = JSON.stringify(obj1, null, "--"); var obj31Filter = JSON.stringify(obj1, null, 4); // alert(obj3Filter);//"this is a title 1" 调用toJSON() // alert(obj31Filter);//"this is a title 1" 调用toJSON() /* * 1.3 解析 JSON.parse() */ var objJstr = JSON.stringify(obj); var objJparse = JSON.parse(objJstr, function (key, value) { if (key == "title") { return "我准备改变title"; } else { return value; } }); // alert(objJparse); // alert(objJparse.title);