JSON

一语法
1,简单值
  可以表示字符串,数值,布尔值和null,不支持javascript的undefined
  JSON字符串只能用双引号表示,单引号会导致错误
2,对象
  JSON中的对象要求给属性加引号

  {
    "name":"Nicholas",
    "age":29
  }

  没有变量和分号
3,数组
  [25,"hi",true]
  没有变量和分号
二,解析与序列化
1,JSON对象
  stringify(),把javascript对象序列化为JSON字符串
  parse(),把JSON字符串解析为原生Javascript值

  var book = {
    title:"Professioal Javascript",
    authors:["Nicholas C. Zakas"],
    edition:3,
    year:2011
  }
  var JSONText = JSON.stringify(book);

  JSONText是使用stringify方法,将javaecript对象序列化转变为JSON字符串,字符串不包含任何字符或缩进,如下
  {"title":"Professioal Javacsript","authors":["Nicholas C. Zakas"],"edition":3,"year":2011}
  序列化对象时,所有函数及原型成员都会被有意忽略,值为undefined的任何属性也会被跳过
  var bookcopy = JSON.parse(JSONText);
  创建了与book类似的对象,但他们是两个独立的,没有任何关系的对象
2,序列化选项
  JSON.stringify()方法接收另外两个参数,第一个参数是过滤器,可是一个数组,也可是函数,第二个参数是一个选项,表示是否在JSON字符串中保留缩进
  1)过滤结果
  如果过滤器是数组,那么结果中只包含数组中列出的属性
  如果过滤器是函数,函数接收两个参数,属性名和属性值,属性名只能是字符串,键值可以更改,可为空字符串,也可变为undefined

  var book = {
    "title":"Professional Javascript",
    "authors":["Nicholas C. Zakas"],
    "edition":3,
    "year":2011
  }
  var JSONText = JSON.stringify(book,function(key,value){
    switch(key){
      case "authors":
        return value.join(",");
      case "year":
        return 5000;
      case "edition":
        return undefined;
      default:
        return value;
    }
  });

  结果为{"title":"Professioanl Javascript","authors":["Nicholas C. Zakas"],"year":5000}
  2)字符串缩进
  第三个参数,是一个数值,表示每一个级别缩进的空格数
  var JSONText = JSON.stringify(book,null,4);
  最大缩进空格数为10,大于10的值会自动转换为10
  如果第三个参数不是数值而是字符,则不用空格缩进,而用所给字符缩进
  3)toJSON()方法
  给对象定义toJSON(),方法返回其自身的JSON对象

  var book = {
    "title":"Professional Javascript",
    "authors":["Nicholas C. Zakas"],
    "edition":3,
    "year":2011,
    toJSON:function(){return this.title;}
  };

  toJSON()作为函数过滤器的补充,假设把一个对象传入JSON.stringify(),序列化该对象的顺序如下
  1)如果存在toJSON(),方法而且能够通过它取得有效值,调用该方法,否则返回对象本身
  2)如果提供了第二个参数,应用这个函数过滤器,传入函数过滤器的值是1)返回的值
  3)对2)步返回的每个值进行相应的序列化
  4)如果提供了第三个参数,执行相应的格式化
3,解析选项
  JSON.parse()方法可以接受另一个参数,该参数是一个函数,将在每个键值对上调用
  为了区别JSON.stringify()接受的替换(过滤)函数,这个函数叫做还原函数

  var book = {
    "title":"Professional Javascript",
    "authors":["Nicholas C. Zakas"],
    "edition":3,
    "year":2011,
    releaseDate:new Date(2011,11,1)
  };
  var jsonText = JSON.stringify(book);
  var bookcpoy = JSON.parse(jsonText,function(key,value){
    if(key == "releaseDate"){
      return new Date(value);
    }else{
      return value;
    }
  });

posted on 2014-04-04 12:55  哈哈李小博  阅读(158)  评论(0编辑  收藏  举报