• Json


    json  =>  javascript object notation

    什么是json

    数据交换的文本格式,简单说,每个Json对象,就是一个值,要么是简单类型的值,要么是复合类型的值,但是只能是一个值,不能是两个或更多的值,这就是说,每个Json文档只能包含一个值。

    (ie7及以下浏览器不支持json,只需要去http://json.org下载对应文件就行)。

    json的优点

    书写简单,一目了然,符合javascript原生语法,可以由解释引擎直接处理,不用另外添加解析代码。

    json数据类型和格式规定

    · 复合类型的值只能是数组或对象,不能是函数、正则表达式对象,日期对象。

    · 简单类型的值只有四种:字符串、数值(必须以十进制表示)、布尔值和null(不能使用NaN,Infinity,-Infinity,undefined)。

    · 字符串必须使用双引号表示,不能使用单引号  ["one","two","three"]

    · 对象的键名必须放在双引号里面  {"one":1,"two":2,"three":3}    {"names":["张三","李四"]}

    · 数组或对象最后一个成员的后面,不能加逗号   [{"name":"张三"},{"name":"李四"}]

    Json的两个方法( JSON.stringify()  和  JSON.parse()

    JSON.stringify()用于将一个值转为字符串。该字符串应该符合JSON格式,并且可以被JSON.parse()方法还原。

    例1:

    JSON.stringify('abc');    // ""abc""
    JSON.stringify(1);     //  "1"
    JSON.stringify(false);    //  "false"

    JSON.stringify() 的第二个参数(可以是函数,用来更改JSON.stringify的默认行为),指定需要转成字符串的属性

    var obj = {
      'prop1':'value1',
      'prop2':'value2',
      'prop3':'value3'          
    }
    var selectedProperties = ['prop1','prop2'];
    JSON.stringify(obj,selectedProperities);
    
    // "{"prop1":"value1","prop2":"value2"}"
    JSON.stringify(['a','b'],['0']);
    
    // "["a","b"]"   对数组无效,只对对象有效
    
    JSON.stringify({0:'a',1:'b'},['0']);
    
    // "{"0","a"}"
    function f(key,value){
      if(typeof value === "number"){
           value = 2 * value;   
       }  
       return value;  
    }
    JSON.stringify({a:1,b:2},f);
    
    // "{"a":2,"b":4}"

    JSON.stringify 的第三个参数,用于增加返回的JSON字符串的可读性。如果是数字,表示每个属性前面添加的空格(最多不超过10个);如果是字符串(不超过10个字符),则该字符串会添加在每行前面。

    JSON.stringify({p1:1,p2:2},null,'|--');
    //{
        |--"p1":1,
        |--"p2":2
       }

    toJSON方法

    如果JSON.stringify的参数对象有自定义的toJSON方法,那么JSON.stringify会使用这个方法的返回值作为参数,而忽略原对象的其他属性。

    var user = {
      firstName:'三',
      lastName:'张',
      get fullName(){
         return this.lastName + this.firstName;  
      },
      toJson:function(){
         var data = {
            firstName:this.firstName,
            lastName:this.lastName
         };
         return data;  
      }      
    };
    JSON.stringify(user);
    
    // "{"firstName":"三","lastName":"张"}"

    toJSON方法可以将正则对象自动转为字符串。因为JSON.stringify默认不能转换正则对象,但是设置了toJSON方法以后,就可以转换正则对象了。

    var obj = {
       reg : /foo/
    }
    //设置 toJSON方法
    
    RegExp.prototype.toJSON = RegExp.prototype.toString;
    JSON.stringify(/foo/) ;
    // ""/foo/""

    JSON.parse()方法,用于将JSON字符串转化成对象。

    JSON.parse('{}');    //{}
    JSON.parse('true');   // true
    JSON.parse('"foo"');   // "foo"
    JSON.parse('[1,5,"false"]');   // [1,5,"false"] 
    JSON.parse('null')   //null
    var o = JSON.parse('{"name":"张三"}');
    o.name  //张三    
    JSON.parse方法可以接受一个处理函数,用法与JSON.stringify方法类似。
    
    function f(key,value){
      if(key === ''){
          return value;
      }  
      if(key === 'a'){
          return value + 10;
      }
    }
    var o = JSON.parse('{"a":1,"b":2}',f);
    o.a  // 11
    o.b  //undefined
  • 相关阅读:
    使用反射获取对象的步骤
    金融IT的算法要求
    Java编译与反编译命令记录
    常用搜索博客/网站
    Java核心-03 谈谈final、finally、 finalize有什么不同?
    Java核心-02 Exception和Error有什么区别?
    PHP函数技巧篇
    IO
    Markdown 简单使用教程
    FZu Problem 2233 ~APTX4869 (并查集 + sort)
  • 原文地址:https://www.cnblogs.com/baixuemin/p/6485579.html
Copyright © 2020-2023  润新知