在东南亚海滩的阳光下,时而有一些贝壳、手工艺品等迷人的商品吸引着你。然而,语言的障碍有时会成为购买商品的阻碍。不得不用手比划以及尝试各种办法来进行交流。幸运的是,人们找到原始沟通的技巧,让彼此都能接受的信息交流方式:在沙滩上用脚画数字。
商家在沙滩上细心绘制商品的价格,游客仔细观察,并以图形的方式表达自己的意愿。如果商家同意,他会点头或用手势表示接受;如果不同意,他会擦掉所画的数字,并用新的数字来表示自己的心理价位。通过几轮互动,双方逐渐接近对价格的共识,最终达成交易,这一切既有趣又高效。
在编程中,前后端为了确保双方能够顺利传递信息,需要约定一种信息交换的方式。其中JSON作为一种轻量级、易读写的数据格式,就像在沙滩上画数字一样,成为了前后端信息交互的默契方式。通过约定好的JSON数据结构,请求和响应双方能够更加高效地交换信息,实现信息的无缝传递。
那么,JSON就是信息交换所使用的的一种数据格式。
常见的数据交互格式包括纯文本、XML、JSON等不同结构,让我们分别来看一下它们之间的区别。
1. 纯文本格式
● 竖线分割的(姓名|性别|地址|年龄|手机号)
张三|男|沙阳路18号北京科技职业学院内|23|13333335555
婉儿|女|大连设计城901|22|13333336666
● 逗号分割的(姓名,性别,地址,年龄,手机号)
张三,男,沙阳路18号北京科技职业学院内,23,13333335555
婉儿,女,大连设计城901,22,13333336666
2. XML格式
张三
张三
沙阳路18号北京科技职业学院内
23
13333335555
张三
张三
沙阳路18号北京科技职业学院内
23
13333335555
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:数据内容与标签相同时可进行转义
原文:“中国>北京>昌平>沙河>千锋教育 ”
转义为:“中国>北京>昌平>沙河>千锋教育 ”
d. 缺点1:数据传输量大,是文本的好几倍,属性描述字段需要有开始和结束标签,例如:“
3. json格式
a. 优点1:格式清晰,顺序可调整,后端新增项不会影响影响前端
b. 优点2:支持层级结构(后面展开说)
c. 优点3:数据内容与标签相同时可进行转义
原始内容:"addr":"中国北京昌平沙河"千锋教育""
转义后:"addr":"中国北京昌平沙河\"千锋教育\""
d. 优点4:数据传输量适当,属性描述字段不需要有闭合标签,例如:“name:"张三"”
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通常比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 -