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

深入理解javascript中的JSON

2017-03-29 18:43 507 查看
首先注明写这篇博文的原因是看了一篇文章,比较喜欢博主的风格。

从三个部分聊聊,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}
}


  

  

  

  

  

  

  

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