首先注明写这篇博文的原因是看了一篇文章,比较喜欢博主的风格。
从三个部分聊聊,JSON的定义,js对象和JSON,js中JSON的函数。
1.JSON的定义
官网给出的解释是:一种轻量级的数据交换格式。相比于xml格式,占据更小的宽带。
<person><name>二百六</name><height>160</height><weight>60</weight></person> {"name":"二百六","height":160,"weight":60}
JSON基于两种结构
“键/值”:key: value,在js中理解为对象,以“{”“}”开头和结束 值的有序列表:数组,以“[”“]”开头和结束
JSON的值 1.可以是双引号括起来的字符串(string)、数值(number)、true、false、 null、对象(object)或者数组(array)。这些结构可以嵌套。//注意没有undefined 2.undefined、任意的函数(除去toJSON函数之外)以及 symbol 值(symbol详见ES6对symbol的介绍) (1)出现在非数组对象的属性值中:在序列化过程中会被忽略 (2)出现在数组中时:被转换成 null 3.布尔值,数字,字符串会自动转化为对应的原始值。new String('hello') => 'hello',welcome+123 => 'welcome123'。 4.键名不是双引号的(包括没有引号或有单引号),会自动变为双引号,字符串是单引号的,会自动变为双引号。 5.最后一个属性后面有逗号的,会被自动去掉。
var friend={ firstName: 'Good', 'lastName': 'Man', 'address': undefined, 'phone': ["1234567",undefined], 'fullName': function(){ return this.firstName + ' ' + this.lastName; }, }; JSON.stringify(friend); "{"firstName":"Good","lastName":"Man","phone":["1234567",null]}" 另外函数名称变为toJSON: var info={ "msg":"I Love You", "toJSON":function(){ var replaceMsg="Go Die"; return replaceMsg; } }; JSON.stringify(info); ""Go Die""
2.js对象和JSON
本质不同的东西,就好比“斑马”和“斑马线”,斑马线是基于斑马命名的;
JSON(JavaScript Object Notation)即Javascript对象符号,JSON的语法是基于js对象的;
斑马线是非生物,好比JSON是一种数据格式;而斑马是活的,js对象是一个实例,存在与内存的一个东西。
JSON是可以传输的,因为它是文本格式,js对象没办法传输;
语法上JSON更为严格。
3.js中JSON的函数
JSON.stringify(value[, replacer [, space]]) 第一个参数,传入一个JSON格式的js对象或数组, 第二个参数,可以是函数,也可以是数组。若不想设置第二个参数,只想设置第三个参数时,第二个参数设置为null,示例如下:
1.第二个参数为函数时: var friend={ "firstName": "Good", "lastName": "Man", "phone":"1234567", "age":18 }; var friendAfter=JSON.stringify(friend,function(key,value){ if(key==="phone") return "(000)"+value; else if(typeof value === "number") return value + 10; else return value; //如果你把这个else分句删除,那么结果会是undefined }); console.log(friendAfter); //输出:{"firstName":"Good","lastName":"Man","phone":"(000)1234567","age":28} 2.第二个参数为数组时: var friend={ "firstName": "Good", "lastName": "Man", "phone":"1234567", "age":18 }; //注意下面的数组有一个值并不是上面对象的任何一个属性名 var friendAfter=JSON.stringify(friend,["firstName","address","phone"]); console.log(friendAfter); //{"firstName":"Good","phone":"1234567"} //指定的“address”由于没有在原来的对象中找到而被忽略
第三个参数,用于美化输出——不建议用 取值如果是1-10的数字时,代表几个空格, 字符串时用字符取代空格,最多取前10个字符, 没有提供或为null时,为默认
var friend={ "firstName": "Good", "lastName": "Man", "phone":{"home":"1234567","work":"7654321"} }; //直接转化是这样的: //{"firstName":"Good","lastName":"Man","phone":{"home":"1234567","work":"7654321"}} 情况1: JSON.stringify(friend,null,4); 输出: { "firstName": "Good", "lastName": "Man", "phone": { "home": "1234567", "work": "7654321" } } 情况2: JSON.stringify(friend,null,"HAHAHAHA"); 输出: { HAHAHAHA"firstName": "Good", HAHAHAHA"lastName": "Man", HAHAHAHA"phone": { HAHAHAHAHAHAHAHA"home": "1234567", HAHAHAHAHAHAHAHA"work": "7654321" HAHAHAHA} }