JSON
JSON是基于文本的数据格式,相对于基于二进制的数据。所以JSON在传递的时候是传递符合JSON这种格式的字符串,我们常会称为“JSON字符串”。
JSON是轻量级的数据格式,如xml
需要用到很多标签,而JSON比较轻量,即相同数据,以JSON的格式占据的带宽更小,这在有大量数据请求和传递的情况下是有明显优势的。
JSON被广泛地用于数据交换。以前端js进行ajax的POST请求为例,后端PHP处理请求为例:
1. 前端构造一个js对象,用于包装要传递的数据,然后将js对象转化为JSON字符串,再发送请求到后端;
2. 后端PHP接收到这个JSON字符串,将JSON字符串转化为PHP对象,然后处理请求。
两种语言都能把JSON这种数据格式很容易地转化为自己能理解的数据结构
JSON和js对象的区别
JSON是可以传输的,因为它是文本格式,但是js对象是没办法传输的。
在语法上,JSON也会更加严格。JSON的键名必须是加双引号,JSON的值只能是数值(10进制)、字符串(双引号)、布尔值和null,也可以是数组或者符合JSON要求的对象,不能是函数、NaN, Infinity, -Infinity和undefined,最后一个属性后面不能有逗号,数字前导0不能用,小数点后必须有数字。
虽然JSON的
JSON基本使用
通常我们使用JSON.stringify,传入一个对象,将js对象转化成JSON字符串
JSON.stringify({"name": "sysuzhyupeng","age": 24});
如果第二个参数是一个函数,那么序列化过程中的每个属性都会被这个函数转化和处理
var info = {
name: 'sysuzhyupeng',
age: 24
}
var str = JSON.stringify(info, function(key, value){
if(key == 'age'){
return value + 10;
} else{
//如果你把这个else分句删除,那么结果会是undefined
return value;
}
})
str // "{"name":"sysuzhyupeng","age":34}"
第二个参数还可以传入数组来过滤key值
var info = {
name: 'sysuzhyupeng',
age: 24
}
var str = JSON.stringify(info, ['name']);
str // "{"name":"sysuzhyupeng"}"
JSON.parse()
如果参数JSON字符串不是合法的字符串的话,那么这个函数会抛出错误,所以如果你在写一个后端返回JSON字符串的脚本,最好调用语言本身的JSON字符串相关序列化函数
以上所说的两个函数都不兼容IE7以下的浏览器