JSON

本文原创地址链接:http://blog.csdn.net/zhou_xiao_cheng/article/details/53395869,未经博主允许不得转载。
JSON,即JavaScript Object Notation(JavaScript对象表示法),是一种数据的格式,虽然语法和JavaScript极为相似,但是JSON和JavaScript之间并没有从属关系,除了JavaScript,还有很多其它的编程语言也在使用JSON。
XML与JSON均可用于读写结构化数据,但在浏览器端,XML数据结构要先解析成DOM文档,再从中提取数据(通过getElementLById('idName')等方法),而JSON数据结构可以直接解析成为JavaScript对象,然后操作对象就行了。由于操作上没有XML那么繁琐,加之语法和JavaScript的相似度极高,JSON得到了程序猿们的拥护,然后,XML就这样慢慢被抛弃了。。。

JSON可由于表示以下几种类型的值:

  • 简单值。这个与JavaScript表示原始数据类型(数值、字符串、布尔值)的语法几乎相同。

    表示数值:1
    
    表示字符串:"hello world" //JavaScript表示字符串还可以使用单引号
    
    表示布尔值:false
  • null。

    表示nullnull
  • 数组。

    JavaScript表示数组的方法:
    var array = ["hello", 1, false]; //ES6中,可以不写结尾处的分号
    JSON表示数组的方法:
    ["hello", 1, false] //没有变量,结尾没有分号
  • 对象。

    JavaScript表示对象的方法:
    var obj = {
        name:  "zhou xiao cheng", 
        age:  10
    };  //ES6中,可以不写结尾处的分号
    JSON表示对象的方法:
    {
        "name":  "zhou xiao cheng", 
        "age":  10
    }  //键名必须加上双引号,结尾没有分号

JSON的方法:

  • stringify()。该方法用于将JavaScript对象转化成JSON字符串,一共有3个参数,但只有第一个参数(要转化成JSON字符串的对象)是必须的。

    var obj = {
        name:  "zhou xiao cheng", 
        age:  10
    }; 
    var jsonText = JSON.stringify(obj);
    console.log(jsonText);
    输出结果:
    {"name":"zhou xiao cheng","age":10}

    可以看到,在默认情况下,输出的JSON字符串没有任何缩进和空格。
    该方法的第二个参数是一个过滤器,它可以是一个函数或数组。如果参数是函数(通常将该函数称为过滤函数),则该函数会接收两个参数:属性名和属性值,函数返回的值就是相应属性名的值,若函数返回undefined,则忽略相应的属性;

    var obj = {
        name:  "zhou xiao cheng", 
        age:  10,
        interest: "sport"
    }; 
    var jsonText = JSON.stringify(obj, function(key, value){
      if(key == "name"){
        return "zhou";
      }
      else if(key == "interest"){
        return undefined;
      }
      else{
        return value;
    }
    console.log(jsonText);
    输出结果:
    {"name":"zhou","age":10}

    如果参数是数组,那么JSON.stringify()转化的结果就只包含数组中列出的属性。

    var obj = {
        name:  "zhou xiao cheng", 
        age:  10,
        interest: "sport"
    }; 
    var jsonText = JSON.stringify(obj,["name"]);
    console.log(jsonText);
    输出结果:
    {"name":"zhou xiao cheng"}

    该方法的第三个参数用于控制JSON字符串中的缩进以及空白符,该参数原则上可以是任意字符,但必须小于10,否则都将自动转化成10。输出 的JSON字符串都将自动换行。

    var obj = {
        name:  "zhou xiao cheng", 
        age:  10interest: "sport"
    }; 
    var jsonText = JSON.stringify(obj, null, 4); //JSON.stringify(obj, null, "__");第三个参数可以为任意字符。
    console.log(jsonText);
    输出结果:
    {
        "name": "zhou",
        "age": 22,
        "interest": "sport"
    }
  • parse()。该方法用于将JSON字符串解析成原生的JavaScript对象,有2个参数,第一个是必选参数(JSON字符串);第二个是可选参数,该参数是一个函数(通常称为还原函数),并和过滤函数一样接收相同的参数,返回的值就是相应属性名的值,如果返回的是undefined,则删除对象对应的属性。

    var obj = {
        name:  "zhou xiao cheng", 
        age:  10,
        interest: "sport"
    }; 
    var jsonText = JSON.stringify(obj);
    var obj2 = JSON.parse(jsonText, function(key, value){
      if(key == "name"){
        return "zhou";
      }
      else if(key == "interest"){
        return undefined;
      }
      else{
        return value;
    }
    });
    console.log(obj2); 

    输出的obj2属性值为name:"zhou", age:10,属性interest已被删除。
    最后,需要特别注意的是,即使obj和obj2的属性和属性值一模一样,它们仍然是两个完全独立的对象,而不是同一个。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值