JSON:让数据传输更优雅

在东南亚海滩的阳光下,时而有一些贝壳、手工艺品等迷人的商品吸引着你。然而,语言的障碍有时会成为购买商品的阻碍。不得不用手比划以及尝试各种办法来进行交流。幸运的是,人们找到原始沟通的技巧,让彼此都能接受的信息交流方式:在沙滩上用脚画数字。

图片

商家在沙滩上细心绘制商品的价格,游客仔细观察,并以图形的方式表达自己的意愿。如果商家同意,他会点头或用手势表示接受;如果不同意,他会擦掉所画的数字,并用新的数字来表示自己的心理价位。通过几轮互动,双方逐渐接近对价格的共识,最终达成交易,这一切既有趣又高效。

图片

在编程中,前后端为了确保双方能够顺利传递信息,需要约定一种信息交换的方式。其中JSON作为一种轻量级、易读写的数据格式,就像在沙滩上画数字一样,成为了前后端信息交互的默契方式。通过约定好的JSON数据结构,请求和响应双方能够更加高效地交换信息,实现信息的无缝传递。

那么,JSON就是信息交换所使用的的一种数据格式。

常见的数据交互的格式

常见的数据交互格式包括纯文本、XML、JSON等不同结构,让我们分别来看一下它们之间的区别。

1.  纯文本格式

    ● 竖线分割的(姓名|性别|地址|年龄|手机号)

张三|男|沙阳路18号北京科技职业学院内|23|13333335555
婉儿|女|大连设计城901|22|13333336666

    ● 逗号分割的(姓名,性别,地址,年龄,手机号)

张三,男,沙阳路18号北京科技职业学院内,23,13333335555
婉儿,女,大连设计城901,22,13333336666

2.  XML格式

<students>
    <student>
        <name>张三</name>
        <gender>张三</gender>
        <addr>沙阳路18号北京科技职业学院内</addr>
        <age>23</age>
        <phone>13333335555</phone>
    </student>
    <student>
        <name>张三</name>
        <gender>张三</gender>
        <addr>沙阳路18号北京科技职业学院内</addr>
        <age>23</age>
        <phone>13333335555</phone>
    </student>
</students>

3.  JSON格式

{
    "students": [
        {
            "name": "张三",
            "gender": "张三",
            "addr": "沙阳路18号北京科技职业学院内",
            "age": 23,
            "phone": "13333335555"
        },
        {
            "name": "张三",
            "gender": "张三",
            "addr": "沙阳路18号北京科技职业学院内",
            "age": 23,
            "phone": "13333335555"
        }
    ]
}

各种格式的对比

1.  文本格式

    a.  优点:内容简洁,传输数据量少

    b.  缺点1:无法适应复杂的业务变化,例如后端将电话与年龄调换位置,前端如果不调整数据就会错乱

    c.  缺点2:不支持有层级结构的,层级结构下面会展开讲解

    d.  缺点3:如果数据中包含竖线,解析时就会出现数据错乱,例如“张三|男|沙阳路18号北京科技职业学院内|23|13333335555”中的地址信息改为“张三|男|沙阳路18号北京科技职业学院内-服务楼2|3|4层|23|13333335555”,解析时就会多出来很多个字段

2.  xml格式

    a.  优点1:格式清晰,顺序可调整,后端新增项也不影响前端

    b.  优点2:支持层级结构

    c.  优点3:数据内容与标签相同时可进行转义

原文:“<addr>中国>北京>昌平>沙河>千锋教育</addr>”
转义为:“<addr>中国>北京>昌平>沙河>千锋教育</addr>”

    d.  缺点1:数据传输量大,是文本的好几倍,属性描述字段需要有开始和结束标签,例如:“<name>张三</name>”

3.  json格式

    a.  优点1:格式清晰,顺序可调整,后端新增项不会影响影响前端

    b.  优点2:支持层级结构(后面展开说)

    c.  优点3:数据内容与标签相同时可进行转义

原始内容:"addr":"中国北京昌平沙河"千锋教育""
转义后:"addr":"中国北京昌平沙河\"千锋教育\""

    d.  优点4:数据传输量适当,属性描述字段不需要有闭合标签,例如:“name:"张三"”

展开说说JSON?

JSON,即JavaScript Object Notation,直译是js对象标记。是一种轻量级的数据交换格式,它由键值对组成,用于表示结构化的数据

既然咱们展开说就说的直白一点,JSON的是由js当中的对象数据类型演化而来,用于描述某种对象的属性和值的,并且具有上级结构,为了方便传输,把这种数据改造为字符串,诶,这不就来了吗,js对象数据类型如下:

//某个人
const person= {
    name:'张三',
    age:19,
    phone:'13333335555',
    addr:'国家省市县'
}
//省市县的对象,树状的层级结构
const addr = {
  "name": "中国",
  "type": "country",
  "children": [
    {
      "name": "北京市",
      "type": "province",
      "children": [
        {
          "name": "北京市",
          "type": "city",
          "children": [
            { "name": "东城区", "type": "county" },
            { "name": "西城区", "type": "county" },
            { "name": "朝阳区", "type": "county" },
            { "name": "海淀区", "type": "county" }
          ]
        }
      ]
    },
    {
      "name": "上海市",
      "type": "province",
      "children": [
        {
          "name": "上海市",
          "type": "city",
          "children": [
            { "name": "黄浦区", "type": "county" },
            { "name": "徐汇区", "type": "county" },
            { "name": "闵行区", "type": "county" },
            { "name": "宝山区", "type": "county" }
          ]
        }
      ]
    }
  ]
}

但,这是js的对象数据类型,数据类型本质是内存中存储数据的方式,我们不可能把内存传输给后台。

图片

不能传输内存,那就转为字符串传递呗,按照对象数据类型的这个结构,变为字符串格式的,这多清晰明了,数据量也不是很大,又能很好兼顾层级结构(省市县const addr),说干就干,于是我们转为下面这个样子:

let addrJSONString = `{
  "name": "中国",
  "type": "country",
  "children": [
    {
      "name": "北京市",
      "type": "province",
      "children": [
        {
          "name": "北京市",
          "type": "city",
          "children": [
            { "name": "东城区", "type": "county" },
            { "name": "西城区", "type": "county" },
            { "name": "朝阳区", "type": "county" },
            { "name": "海淀区", "type": "county" }
          ]
        }
      ]
    },
    {
      "name": "上海市",
      "type": "province",
      "children": [
        {
          "name": "上海市",
          "type": "city",
          "children": [
            { "name": "黄浦区", "type": "county" },
            { "name": "徐汇区", "type": "county" },
            { "name": "闵行区", "type": "county" },
            { "name": "宝山区", "type": "county" }
          ]
        }
      ]
    }
  ]
}`
//注意,我使用了反引号,这样的数据字符串可以换行

JSON的组成

    ● 大括号 {}:用于表示对象的开始和结束,对象是由一组无序的键值对组成的。
    ● 方括号 []:用于表示数组的开始和结束,数组是由一组有序的值组成的。  
    ● 冒号 ::用于分隔键和值,将键与对应的值关联在一起。
    ● 逗号 ,:用于分隔数组或对象中的不同键值对或值,将它们分开。
    ● 双引号 " 或单引号 ':用于包围字符串,表示字符串的开始和结束。
    ● 反斜杠 \:用于转义特殊字符,确保特殊字符的正确解析。

写到最后:JSON的优雅之处

    ● 数据体积JSON通常比XML更小巧。由于JSON采用了简洁的语法,不需要像XML那样添加大量的标签和属性,因此JSON的数据体积相对较小。这使得JSON在网络传输中消耗的带宽更少,有利于提高数据传输的效率。

    ● 语法复杂性:相比较而言,XML的语法相对复杂一些。XML需要使用起始标签和结束标签来包裹数据,而JSON只需要使用花括号 {} 和方括号 [] 就可以表示对象和数组。这使得JSON的语法更加简洁和易读。

    ● 解析效率:由于JSON的语法相对简单,它的解析速度通常比XML更快。这对于大规模数据的处理和解析非常重要,尤其在需要实时响应的应用场景下。

    ● 兼容性:JSON在前端和后端的兼容性较好。几乎所有主流编程语言都有JSON的解析和序列化库,这使得JSON在前后端交互时更为便捷。

    ● 可读性:JSON相对于XML更易读写。JSON的结构类似于JavaScript对象,使得开发者能够更直观地理解数据结构,便于调试和开发。

    ● 扩展性:尽管XML在一些特定领域具有更好的扩展性,但对于一般的树形数据结构,JSON的扩展性也是足够的。JSON支持嵌套对象和数组,可以灵活地表示复杂的数据结构。

    综上所述,JSON在处理省市县和汽车等树形数据结构时具有更小的数据体积、更简洁的语法、更快的解析效率和更好的兼容性等优势。这些优势使得JSON成为处理树形数据结构的首选数据格式,尤其在现代Web应用和移动应用中广泛应用。然而,对于一些特定需求,XML仍然可能是更好的选择,比如需要更复杂结构和更强的扩展性的场景。

- End -

猜你喜欢

转载自blog.csdn.net/sdasadasds/article/details/132098786