JSON知识总结

Posted 合众汇才

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JSON知识总结相关的知识,希望对你有一定的参考价值。

一、什么是JSON


    JSON全称javascript Object Notation(JS对象标记),是一种轻量级的数据交换格式。它相对于XML更小、更易于人阅读和编写,同时也易于机器解析和生存,并有效地提高网络传输效率。

 

二、JSON数据格式

    1、整体结构

        String json1 = {"name" : "Jack","sex" : "男"}

        String json2 = [{"name" : "Jack","sex" : "男"},{"name" : "Vincent","sex": "男"}]

 

    2、JSON对象------左花括号({ )开头,右花括号(})结尾,一个键值对为一个属性

        Json对象结构:{key1:value1,key2:value2...}

                a)、key的数据类型:字符串

                b)、value的数据类型:字符串、数值、null、json数组[]、json对象{}

 

    3、JSON数组------类似数组或序列

        JSON数组结构:[value1,value2......]

                a)、value的数据类型:字符串、数值、null、json数组[]、json对象{}

 

    语法规则:

        1)、数据在名称/值中,为一个键值对,表示的是对象的属性

        2)、除了最后一个属性或对象,每个属性,每个对象都必须用逗号(,)分隔

        3)、花括号({})保存对象,一对花括号表示一个对象

        4)、方括号([])保存数组,一对方括号表示一个数组

 

三、JSON的语法

    1)、JSON对象

        JSON对象是在花括号中书写的,对象中可以包含多个属性,多个属性之间用逗号(,)隔开。

     格式:{"name":"Vincent","sex":"男"}

 

    2)、JSON 对象的属性

        JSON对象属性的书写格式为:名称:值,是一个键值对。官方规定,在JSON字符串中,JSON的Key值必须用双引号标起来,而不是单引号或无引号。

     格式:"name":"Vincent"

 

    3)、JSON数组

        JSON对象中可以包含多个数组,用方括号([])将对象或属性包含在其中


   
     
     
   
  1. {

  2. "user":[{ "name":"Vincent" , "sex":"男" },

  3. { "name":"Jack" , "sex":"男" },

  4. { "name":"Tom" , "sex": "男" }]

  5. }

 

    4)、JSON中使用JavaScript语法

        a、通过JavaScript,创建一个JSON对象数组


   
     
     
   
  1. var user = [{ "name":"Vincent" , "sex":"男" },

  2. { "name":"Jack" , "sex":"男" },

  3. { "name":"Tom" , "sex": "男" }];

 

        b、每一个JSON对象都存储在递增的数组下标中,通过下标去访问该对象的属性

        代码:user[0].name

        结果:Vincnet

 

        c、获取指定下标中的JSON对象之后,我门还可以修改其属性值

        代码:user[0].name = "Jobs";

 

四、JSON的优缺点

        1、XML和JSON的区别


   
     
     
   
  1. <addressbook>

  2. <name>Mary Lebow</name>

  3. <address>

  4. <street>5 Main Street</street>

  5. <city> San Diego, CA </city>

  6. <zip> 91912 </zip>

  7. <phoneNumbers>

  8.     <phone>619 332-3452</phone>

  9.     <phone>664 223-4667</phone>

  10. </phoneNumbers>

  11. </address>

  12. </addressbook>


   
     
     
   
  1. {

  2. "addressbook":{"name":"Mary Lebow",

  3. "address":{"street":"5 Main Street",

  4. "city":"San Diego, CA",

  5. "zip":"91912",

  6. "phoneNumbers":["619 332-3452","664 223-4667"]

  7. }


  8. }

  9. }

   从上面的介绍和代码我们大致可以看出JSON的优缺点

        1)、优点

            a)、数据体积小,轻量级的数据交换

            b)、程序员编写更加容易

            c)、相对XML,JSON不需要考虑子父节点,更易于机器的解析和生成

            d)、JSON支持多种编程语言,例如:Java、JavaScript、php、Python、C、C#等等

        2)、缺点

            a)、语法上过于严谨

            b)、代码对数据的描述性差

            c)、代码不宜读

 

五、JSON的解析

    1、转换关系

        服务端:Java对象(包括集合) → JSON字符串

        客户端:JSON字符串 → Java对象(包括集合)  or  JSON字符串 → JS对象

    注意:{"name":"Vincent"}该语句表示的是JSON字符串,而{name:"Vincent"}表示的是JSON对象。前者无法直接输出

 

    2、JSON字符串 和 JSON对象的区别

            JSON字符串:仅仅是一个符合JSON格式的字符串,无法获取其属性值,类型为String

            JSON对象:一个符合JS对象的JSON实例化对象,可以通过指定属性获取其值,类型为Object

             

 

    3、JSON字符串 和 JSON对象的转换

        a)、JSON字符串 转 JSON对象  ------  调用JSON.parse()方法

                JSON知识总结

        b)、JSON对象 转 JSON字符串  ------  调用JSON.stringify()方法

                JSON知识总结

 

六、JSON字符串  和 JSON对象的关系

 

        a)、JSON字符串:用于"传输"或"存储JSON数据"。传输或存储过程中,JSON对象处理之后序列化为JSON字符串,之后传递到"前端"、"处理类"、"数据库"中或通过"TCP/IP协议"发送出去。

        b)、JSON对象用于输出具体对象属性值。程序获取传递过来的JSON字符串是无法操作的,只能用于传递或输出字符串。所以我们需要通过指定方法,将JSON字符串转换为Objec类型的JSON对象,之后JSON对象通过指定属性获取该属性值。

 

七、JSON对象 和 JSON字符串的语法规范

        1、JSON对象语法规范:


   
     
     
   
  1. //【1】、JS创建JSON对象

  2. var num1 = {"id":"1","name":"vincent","sex":"男","age":"20"};

  3. var num2 = {id:"1",name:"vincent","sex":"男","age":"20"};

  4. var num3 = {id:"1",name:"vincent",sex:"男",age:"20"};

  5. console.log(num1); //输出该对象

  6. console.log(num2); //输出该对象

  7. console.log(num3); //输出该对象

  8. console.log("对象num2中id = "+num2.id+" 的数据类型为:"+typeof(num2.id)); //输出该对象的数据类型


  9. //比较对象之间是否相等

  10. console.log(num1 == num2);

  11. console.log(num1 == num3);

  12. console.log(num2 == num3);

  13. var num4 = {"id":"1","name":"vincent","sex":"男","age":"20"};

  14. console.log(num1 == num4);

JSON知识总结

 

        2、JSON字符串语法规范


   
     
     
   
  1. //【2】、JS创建JSON字符串

  2. var sum = '{"id":"2","name":"vincent","sex":"男","age":"20"}';

  3. console.log(sum); //输出该对象

  4. console.log("数据类型:"+typeof(sum)); //输出该对象的数据类型


  5. console.log("------------------------------分界线---------------------------------");


  6. //【3】、JSON字符串 转 JSON对象

  7. var sums = '{"id":"4","name":"vincent","sex":"男","age":"20"}';

  8. var sumC = JSON.parse(sums);

  9. console.log(sumC); //输出该对象

  10. console.log(typeof(sumC)); //输出该对象的数据类型


  11. //【错误】、JSON字符串 转 JSON对象

  12. var sums = '{id:"4",name:"vincent","sex":"男","age":"20"}';

  13. var sumC = JSON.parse(sums);

  14. console.log(sumC); //输出该对象

  15. console.log(typeof(sumC)); //输出该对象的数据类型

                JSON字符串其实就是一个普通的字符同,不同的是他满足JSON的语法规范而已。官方规定JSON字符串的键值对必须都包括在冒号("")之中,这是一个用于识别JSON语句的语法规范。当字符串在没有反序列化时就是一个普通的字符串,所以加不加冒号都无所谓,但是当使用JSON.stringify()方法时,表示的是将JSON字符串序列化为JSON对象,此时如果字符串不符合JSON的语法规范则会报错。

            

            从图中可以看出,由于错误的范例中,属性id和name均没有用双引号标起来,所以在反序列化的过程中,程序会判断为普通的字符串,而非JSON字符串,所以报错。

 

八、扩展

        a)、什么是序列化

                对象“转换”为字节序列的过程称为对象的序列化

          b)、什么是反序列化

                    字节序列“恢复”为对象的过程称为对象的反序列化。

        解释:序列化(Serialization)就是将对象的状态信息转换为可以传输或存储的字节序列形式。在序列化期间,对象将其状态写入到临时或持久性存储区。以后,可以通过存储区中读取或反序列化为对象状态,重新创建该对象。

 

        c)、底层如何实现序列化?

                ------------以后补充,感兴趣的可以自行了解----------



以上是关于JSON知识总结的主要内容,如果未能解决你的问题,请参考以下文章

json 此片段用于以下知识库文章 - https://kb.wpbeaverbuilder.com/article/220-installl-beaver-builder-via-compos

json 个人的vscode的代码片段

实用代码片段将json数据绑定到html元素 (转)

android小知识点代码片段

json 可视代码工作室Angular with Firebase片段

vs code 用户代码片段 html.json