码迷,mamicode.com
首页 > Web开发 > 详细

JSON

时间:2016-05-04 20:48:47      阅读:185      评论:0      收藏:0      [点我收藏+]

标签:

JSON是一种数据格式

1.JSON 语法:

  JSON语法可以表示为三种类型的值:

  1.简单值:可以在JSON中表示字符串、数组、布尔值、null,没有undefined,在JSON中如果有undefined值,该属性会被删除。

    10

    "aaaa"

  2.对象:表示的是一组无序的键值对儿。每个键值对儿中的值可以是简单值,也可以是复杂数据类型的值。 

1 {
2          "name":"ccc",
3          "age":20,
4          "sex":"man"
       "school":{
        "name":"henan",
        "location":"PingDingShan"
        } 5 }

    ps1:JSON对象没有声明变量;

    ps2.:JSON对象的属性必须加" ",属性的值可以是简单值,也可以是复杂类型值。

  3.数组

    JSON数组采用的JavaScript中的数组字面量形式。

    ["20","cc",true]

    把数组和对象结合起来,可以构成更复杂的数据集合:

    

[
         [
           {title:"第一课"},
           {url:"all_input.html",title:"全选,反选,不选"},
           {url:"select_add.html",title:"下拉框"},
           {url:"outline.html",title:"外边框"}
          ],

         [
           {title:"第二课"},
           {url:"border-radius.html",title:"css3圆角"},
           {url:"cd.html",title:"出仓的光盘"},
           {url:"cube.html",title:"立方体"}
          ],

          [
            {title:"第三课"},
             {url:"canvas5.html",title:"刷新一下马赛克"},
             {url:"canvas6.html",title:"碰壁的小方框"},
             {url:"balls/canvas7.html",title:"自由活动的小球"}

           ],

           [
             {title:"第四课"},
             {url:"localstorage.html",title:"记录数据"},
             {url:"cleardate.html",title:"清除本地数据"},
             {url:"linear.html",title:"渐变背景"}
            ],

            [
              {title:"第五课"},
              {url:"photos.html",title:"图片回收站"},
              {url:"shoppingCar.html",title:"商品购物车"},
              {url:"skin.html",title:"背景换肤"}           
             ]               
   ]

2.JSON解析和序列化

  JSON对象有两个方法:stringify()和parse(),分别由于把JavaScript对象序列化为JSON字符串和把JSON字符串解析为JavaScript值。

  

var book = {
               title:"Professional javascript",
               authors:["Nicholas C.Zakas"],
               edition:4,
               year:2015
            };

        var jsonText = JSON.stringify(book);
        console.log(jsonText);  // 输出json格式:{"title":"Professional javascript","authors":["Nicholas C.Zakas"],"edition":4,"year":2015} 

        var bookCopy = JSON.parse(jsonText);
        console.log(bookCopy);  //输出JavaScript格式: {title: "Professional javascript", authors: Array[1], edition: 4, year: 2015}

  1.序列化选项:stringify()

JSON.stringify()除了要序列化的JavaScript对象外,还可以接受另外两个参数,这个参数用于只指定以不同的方式序列化JavaScript对象。第一参数是个过滤器,可以是一个数组,也可以是一个函数;第二个参数是一个选项,表示是否在JSON字符串中保留缩进。

var book = {
                        title:"Professional javascript",
                        authors:["Nicholas C.Zakas"],
                        edition:4,
                        year:2015
            };

        var jsonText = JSON.stringify(book,["title","edition"]);
        console.log(jsonText);  // 输出{"title":"Professional javascript","edition":4} 
    输出book中含有数组的属性,其余不输出。

    第二参数是函数。传入的函数接收两个参数,属性名和属性值。根据属性名可以知道应该如何处理要序列化的对象中的属性。属性中只能是字符串。为了改变序列化对象的结果,函数返回的值就是相应键的值。如果函数返回了undefined,相应的属性会删除,不显示。

  

var jsonText02 = JSON.stringify(book,function(key,value) {
                switch(key){
                    case"authors":
                            return value.join(",")

                    case"year":
                            return 2016

                     case"edition":
                             return undefined;

                     default:
                             return value;                        
                }
            });

        console.log(jsonText02);  //输出:{"title":"Professional javascript","authors":"Nicholas C.Zakas","year":2016}
     输出值中没有edition属性

  2.每个属性换行缩进

  JSON.stringify()的第三个参数用于控制结果中的缩进和空白符,如果该参数是一个数值,它表示每个属性分别缩进的空格数,最大缩进空格数为10,若大于10的值都会自动转换为0.

  如果缩进参数是一个字符串不是数字,那么字符串可以设置为制表符。

var jsonText03 = JSON.stringify(book,null,4);  
        console.log(jsonText03); 
      //输出结果:
{ "title": "Professional javascript", "authors": [ "Nicholas C.Zakas" ], "edition": 4, "year": 2015 }

var jsonText03 = JSON.stringify(book,null,"--");  
        console.log(jsonText03);  
        /*
            {
                --"title": "Professional javascript",
                --"authors": [
                ----"Nicholas C.Zakas"
                --],
                --"edition": 4,
                --"year": 2015
            }
        */

  3.toJSON()方法

  有时,JSON.stringify()还是不能满足对某些对象进行自定义序列化的需求。这时可以给对象定义toJSON()方法,返回其自身的JSON()数据格式。

  

var book2 = {
            "title":"Professional javascript",
            "authors":["Nicholas C.Zakas"],
            edition:4,
            year:2015,
            toJSON:function(){
                return this.title;
            }

        };  -->var book2 = {"Professional javascript"}
        var jsonText04 = JSON.stringify(book2);
        console.log(jsonText04);  //输出:"Professional javascript"

  一个对象传入JSON.stringify(),序列化该对象如下:

  (1)如果存在toJSON()方法而且能通过它取得有效的值,则调用该方法。否则,返回对象本身。

  (2)如果提供了第二个参数,应用这个函数过滤器。传入函数过滤器的值是第(1)步返回的值。

  (3)对第(2)步返回的每个值进行相应的序列化。

  (4)如果提供了第三个参数,执行相应的格式化。

3.解析选项

  JSON.stringify()方法也可以接收另一个参数,该参数是一个函数,将在每个键值对儿上调用。该函数被称为还原函数(reviver),如果还原函数返回undefined,则表示要从结果中删除相应的键。如果返回其他值,则将该值插入到结果中。

var book3 = {
            "title":"Professional javascript",
            authors:["Nicholas C.Zakas"],
            edition:4,
            releaseDate:new Date(2015, 11, 1)  -->解析过执行,此时的属性值为函数的返回值。
        };
        var jsonText05 = JSON.stringify(book3);
        var bookCopy05= JSON.parse(jsonText05,function (key,value) {
            if (key == "releaseDate") {
                return new Date(value);
            }else{
                return value;
            }
            
            }); 

        console.log(bookCopy05.releaseDate.getFullYear());  //输出:2015

 

  

    

 

 

JSON

标签:

原文地址:http://www.cnblogs.com/wine/p/5459451.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!