关于Json的学习

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对象。

原文地址:https://www.cnblogs.com/JoeChan/p/4509764.html