Json是什么?以及Json的序列化和反序列化



https://blog.csdn.net/pupilxiaoming/article/details/80988013

一什么是JSON?

  中午肚子饿了,到餐厅点餐。向服务员点了几个菜,厨师根据用户的需求,开始烹饪食物,食物烹饪好后,怎么将食物呈现给用户呢?这时就需要用到盛放食物的碗了用户拿到盛放食物的碗,就可以获得点的餐了这个碗就充当了数据交换的容器了。(^ - ^)

 

  客户端向服务器端发送请求后,服务器端怎么才能把用户需要的数据返回给客户端呢。这时我们就需要用一个指定的格式将数据,按照指定格式返回客户端。这时就有了两种数据传输的方式(XMLJson):

  在普通的网络应用中,不管是服务器端还是客户端解析XML代码会非常麻烦,所以这时的Json的就更加满足数据传输解析的要求。采用的的Json格式的方式进行数据的传输,不仅方便传输解析,还特别易于人阅读和编写

二.XML与Json的的转换:

1.常规转换:

  1.  
    <emp>
  2.  
    <name>fxhl</name>
  3.  
    <city>深圳</city>
  4.  
    <age>23</age>
  5.  
    </emp>

转换为的Json的为:

  {“名”:“fxhl”,“城市”:“深圳”,“年龄”:23}

三以以.json的表现形式:

  1.对象:

  1.  
    {
  2.  
    "returnCode": "R0000",
  3.  
    "returnMsg": "成功",
  4.  
    "lessTimes": "2",
  5.  
    "domainLink": "",
  6.  
    "seqNum": "1",
  7.  
    "identification": "595279",
  8.  
    "isNeedImageCode": "false"
  9.  
    }

 

  2.数组:

  1.  
    {
  2.  
    "employees": [
  3.  
    { "firstName":"John" , "lastName":"Doe" },
  4.  
    { "firstName":"Anna" , "lastName":"Smith" },
  5.  
    { "firstName":"Peter" , "lastName":"Jones" }
  6.  
    ]
  7.  
    }

 

  3.数组对象混合:

    这是截取的一小部分,对于比较复杂的的的Json格式的字符串,可以在线验证JSON。格式化一个格式。方便观看

      • JSON的表现形式一般就三种(对象,数组,字符串),使用过程中,只是将对象与数组进行混合了

 

  1.  
    {
  2.  
    "icon": [
  3.  
    {
  4.  
    "title": "尚天猫,就购了",
  5.  
    "icon_category": "baobei",
  6.  
    "icon_key": "icon-service-tianmao",
  7.  
    "trace": "srpservice",
  8.  
    "innerText": "天猫宝贝",
  9.  
    "url": "//www.tmall.com/"
  10.  
    },
  11.  
    {
  12.  
    "title": "保险理赔",
  13.  
    "position": "99",
  14.  
    "innerText": "分组-保险理赔",
  15.  
    "iconPopupComplex":
  16.  
           {
  17.  
    "popup_title": "保险理赔",
  18.  
    "subIcons": [
  19.  
    {
  20.  
    "dom_class": "icon-service-yunfeixian",
  21.  
    "icon_content": "卖家赠送退货运费险"
  22.  
    }
  23.  
    ]
  24.  
    }
  25.  
    }
  26.  
    ]
  27.  
    }

 

4. 以以.json序列化和解析

 

JSON.stringify() - 将对象序列化为JSON字符串

JSON.parse() - 将JSON数据解析为Javascript对象

默认情况下JSON.stringify()输出的JSON字符串不包含任何空格字符或缩进;此外,值为未定义的任何属性也都会被跳过,结果都是有效的JSON数据类型。

实际上,JSON.stringify()除了要序列化的javascript对象之外,还可以接收两个参数(用于指定以不同方式序列化的JavaScript):1第一个参数是过滤器(可为数组或函数))2。第二个参数是一个选项(表示是否在JSON字符串中保留缩进)

4.1 过滤结果

  •  如果过滤器的参数是数组,那么JSON.stringify()的结果将只包含数组中列出的属性。

      

注意:第二个数组中的两个字段要与JSON中的属性对应。

输出结果:(jsonText的值)

 

 

 

  • ü如果第二个参数是函数(传入的函数接收两个属性,属性(键)名和属性值):

 

 

输出结果:(jsonText的值)

 

可以看到如果键为”编辑”,通过返回未定义删除该属性。一定要提供默认项,使其他值可以显示在结果中

 

4.12 字符串的缩进

JSON.stringify()方法的第三个参数用于控制结果的缩进和空白符。如果这个参数是一个树枝那么他表示的是每个级别的缩进空格。

例:要每个级别缩进4个空格

var jsonText = JSON.stringify(book,null,4)

注:最大缩进空格为10,所有大于10的值都会被自动转换为10。

 

4.13 tojson()方法

有时候JSON.stringify()不能满足自动序列化的需求。这时就可以给对象定义的toJSON()方法。

                      

结果输出:

                    

的toJSON()方法可以作为函数过滤器的补充假设把一个对象传入JSON.stringify(),序列化该对象的顺序:

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

(2)如果提供了第二个参数,应用这个过滤器,传入过滤器的值是第(1)步返回的值(其实结果就是,上述的jsonText输出结果是的的toJSON()方法返回的值)

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

 

4.2解析结果

JSON.parse()来来方法也可以接收另一个参数,该参数是个函数,将在每个键值对上调用。为了区别去JSON.stringify(),这个函数被称作还原函数

如果还原函数返回未定义则删除该键,如果返回其他值,则将键插入到结果中去。

例:在日期字符串转化为日期对象时,经常用到还原函数

                

输出结果:

              

小结:“JSON对象要求给属性加双引号,忘了给对象属性名加双引号而写成单引号都是常见的错误”。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM