zoukankan      html  css  js  c++  java
  • JSON数据理解

          话说JSON数据平常用的确实挺多的,但是基本上只知道怎么用,对其一些细节并没有整理过,今儿趁着下午有点空,坐下来,学习整理下,并分享出来。

           

          对于JSON,首先它只是一种数据格式,并非一种语言,虽然和javascript长的比较像,但并不从属于javascript。如果你使用过其他编程语言,就会知道,其他语言也有针对JSON的解析器和序列化器。

          JSON可以表示以下3中类型的值

    •       简单值    如字符串、数值、布尔值和null,但不支持undefined
    •       对象       对象作为一种复杂的数据类型,表示是一组无序的键值对儿,值可以是简单值也可以复杂的数据
    •       数组       数组作为一种复杂的数据类型,表示是一组有序的列表儿,可以通过索引来获取引用的值,值可以是简单值,也可以复杂数据对象

        1 . 简单值

        简单值里没有什么可以重点讲的,主要强调一点,而且非常重要,那就是 JSON 字符串必须使用双引号,单引号会报错

        2. 对象

         javascript 中的对象

         

    var object = {
    
                      name:"suyq",
    
                      age :9
    
           }

       JSON 对象

       

    { 
        "name":"suyq",
        "age" :9
    }

    与javascript对象相比,JSON对象有两个地方不一样

    1. 没有声明变量(JSON中没有变量的概念)
    2. 末尾没有分号  

    再说一遍 对象的属性必须加双引号,这个是必须的。

    属性的值可以是简单类型,也可以是复杂类型的值。

    { 
        "name":"suyq",
        "age" :9,
         "school":{
                          "name":"tjn",
                           "location":"tj"
                        }
    }

        3.数组

        javascript中的数组字面量

        

    var  v = [1,"hi",true];
    

      JSON中的数组

    [
                {
                    "name": "张三",
                    "age": 18
                },
                {
                    "name": "李四",
                    "age": 22
                },
                {
                    "name": "王五",
                    "age": 20
                }
            ]
    

      JSON对象

          json 对象主要有两个方法 

          JSON.stringify();

          把javascript 对象转换为json对象

          

     var book =
       {
           title:"javascript",
           authors:["li","susan"],
           year:2011,
    edition:undefined
    }; console.log(JSON.stringify(book));

         输出结果:

         {"title":"javascript","authors":["li","susan"],"year":2011}

        默认情况下,javascript.stringify()所输出的json 字符串不包含任何空格字符和缩进。

       值为undefined的任何属性会被跳过。

         

        序列号选项

         javascript.stringify() 函数还可以接收两个参数,第一个参数是个过滤器,可以是个数组,也可以是个函数,第二个是字符串中保留缩进。

         1.过滤器

          

    var book =
       {
           title:"javascript",
           authors:["li","susan"],
           year:2011,
           edition:undefined
       };
        console.log(JSON.stringify(book,["title"]));

          输出结果:{"title":"javascript"}

          如果第二个参数是函数,传入的函数有两个参数,属性键名和键值。话不多说,直接上例子。

          

     var book =
       {
           title:"javascript",
           authors:["li","susan"],
           year:2011,
           edition:undefined
       };
        console.log(JSON.stringify(book,function(key,value){
    
              switch (key)
              {
                  case "authors":
                          return value.join(",");
                  case "edition":
                          return undefined;
                  default :
                          return value;
              }
        }));

          输出结果:{"title":"javascript","authors":"li,susan","year":2011}

          2.字符串缩进

           

    var book =
       {
           title:"javascript",
           authors:["li","susan"],
           year:2011,
           edition:undefined
       };
        console.log(JSON.stringify(book,function(key,value){
    
              switch (key)
              {
                  case "authors":
                          return value.join(",");
                  case "edition":
                          return undefined;
                  default :
                          return value;
              }
        },5));

          输出结果:

          

    {
         "title": "javascript",
         "authors": "li,susan",
         "year": 2011
    }

         注意:最大缩进空格数为10 ,大于10 自动转换为10缩进。

         2.toJSON 方法

          

     var book =
       {
           title:"javascript",
           authors:["li","susan"],
           year:2011,
           edition:undefined,
           toJSON :function()
               {
                   return this.title;
               }
       };

         输出结果:"javascript"

          有时候如果JSON.stringify()还无法满足序列化需求,可以通过对象上调用toJSON()方法,返回其自身的JSON数据格式。

          toJSON()函数可以作为过滤器的补充。

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

          1.如果存在toJSON()方法,而且通过它可以取到有效值,则先调用它。否则,按照默认顺序执行序列化

          2.如果提供第二个参数,执行该过滤器,传入过滤器的值是第一步的返回值

          3.对第二步返回的值进行相应的序列化

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

         

          JSON.parse();

           json.parse() 也可以接收另一个参数,该参数也是一个函数。

           

     var book =
       {
           title:"javascript",
           authors:["li","susan"],
           year:2011,
           edition:undefined,
           releaseDate:new Date(2011,1,1)
    
       };
       var jsonText  = JSON.stringify(book);
       var bookcopy = JSON.parse(jsonText,function(key,value){
              if(key=="releaseDate")
              {
                  return new Date();
              }else
              {
                  return value;
              }
         })
        console.log(bookcopy.releaseDate.getFullYear());

          输出结果:2016 

  • 相关阅读:
    Tomcat常用配置
    java开发规范总结_命名规范
    Android学习笔记(广播机制)
    Java Web 实现Mysql 数据库备份与还原
    interfaces
    windows phone 1
    正在写。。
    Exceptions
    类的非常简单的应用
    say hello
  • 原文地址:https://www.cnblogs.com/fifalover09/p/5127921.html
Copyright © 2011-2022 走看看