zoukankan      html  css  js  c++  java
  • JSON

    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

      

        

     

  • 相关阅读:
    安装Python及pip
    关于软件测试培训
    终于也为自己开了技术博客
    全球地址联动js包2021最新
    约瑟夫斯问题
    添加二级域名
    mysql导出数据
    mysql导入数据
    shopify
    MySQL数据库简介及常用命令
  • 原文地址:https://www.cnblogs.com/wine/p/5459451.html
Copyright © 2011-2022 走看看