1、Json是一种数据格式,不是编程语言
2、Javasript字符串和Json字符串的区别:Json字符串必须使用双引号,Json不支持Javascript的 undefined。
3、与Javascript对象字面量相比。Json没有声明变量,没有末尾的分号;
4、Json数组的属性必须使用双引号
5、早期的Json解析器使用Javascript的eval()函数。ECMA5script5定义了Json对象。(IE8++)
6、Json对象的两个方法;stringify()和parse()。用于把Javascript的对象序列化为Json字符串和把Json字符串解析为原生Javascript值。
7、JSON.stringify()把一个Javascript对象序列化为一个Json字符串,结果默认不包含任何空字符串或缩进,最终都是值为有效JSON数据类型的实例属性
8、JSON字符串直接传给JSON.parse()可以得到相应的JavaScript值。
9、序列化选项:
var book={ "title":"person Javascript", "author" :["Nicholas"], edition :3, year :2011 }; var jsontext=JSON.stringify(book,["title","edition"]);
var jsonText=JSON.stringify(book,function(key,value){
switch(key){
case "author":
return value.join(",")
case "year":
return 5000;
case "edition":
return undefined;
default:
return value;
}
});
var jsontext=JSON.stringify(book,null,4)
JSON.stringify()第二个参数与将要序列化的对象属性是相对的。在返回的结果字符串中,只包含这两个属性:{"title":"person Javascript","editon":3}
第二个JSON.stringify()使用了函数过滤器,第一次调用时候,传入的键是空字符串,值是book对象;
第三个JSON.stringify()控制结果中的缩进和空白符
10、把一个对象传入JSON.stringify(),序列化该对象的顺序:
(1)如果存在toJSON(方法,并能通过它取得有效的值,调用该方法。否则按默认顺序执行序列化
(2)如果提供了第二个参数,应用函数过滤器。传入函数过滤器的值是(1)的返回值
(3)对第(2)步返回的每个值进行序列化
(4)如果有第三个参数,进行格式化
11、JSON.parse()方法解析:
var book={ "title":"person Javascript", "author" :["Nicholas"], edition :3, year :2011 releaseDate:new Date(2011,11,1) }; var jsontext=JSON.stringify(book); var bookCopy=JSON.parse(jsontext,function(key,value){ if(key=="releaseDate") return new Date(value); else return value; } );
上述的book属性releaseDate保存着一个Date对象。这个对象经过序列化之后变成有效的JSON字符串,然后经过解析在bookCopy中还原为一个Date对象。