zoukankan      html  css  js  c++  java
  • 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;
        }
      });
  • 相关阅读:
    [Noip2016]天天爱跑步
    [ioi2008]Island 岛屿
    [Poi2012]Rendezvous
    RCTF2019 next_php
    WinSocket编程笔记(五)
    PTA的Python练习题(二十一)
    WinSocket编程笔记(四)
    PTA的Python练习题(二十)
    WinSocket编程笔记(三)
    WinSocket编程笔记(二)
  • 原文地址:https://www.cnblogs.com/b0xiaoli/p/3644950.html
Copyright © 2011-2022 走看看