可能《说人话》系列好多用词会不够谨慎,但是对于看这个系列的人易于理解就行,如有不当,欢迎指出。
很多人搜JSON
是啥,在刚接触前端的时候还以为它是一种很牛逼的技术,我刚开始也是。但与其说技术,不如说是一种标准,一种双方收发数据的约定。还是蒙没关系,听我慢慢解释。
一、JSON长啥样
简单来说,JSON
就是一段文本
,比喻得再形象一点也可以说,JSON
就可以是一串字符串
。
我们先来看一下JSON字符串长啥样,比如说有这么一个数据,a有两个儿子,一个叫b一个叫c,a,b,c各有他们的名字
。
{
"a":{
"name":"a",
"child":[
"b":{
"name":"b"
},
"c":{
"name":"cn "
}
]
}
}
看起来像js中的对象吧,但是其实可以看成这样
{ "a":{ "name":"a", "child":[ "b":{ "name":"b" }, "c":{ "name":"cn " } ] } }
它就是一个文本,或者说看成一串字符串。那么这串JSON格式的字符串有什么用呢?
二、为什么会需要JSON,它有什么用
当然是为了传输结构化数据
用的,什么是结构化数据
呢,说人话就是就是数据和数据之间有关联的数据格式。相反则是非结构化数据
。
比如分开说a的名字是a
这个数据与b的名字是b
这个两个数据有关联吗,没有关联,那要将他们关联起来怎么办,就得变成a的名字是a并且他的儿子b的名字是b
。
如果机器懂人话的话,那它确实可以当作结构化数据。但是机器不懂人话,我们教他去识别博大精深的中国语言文化实在是太困难了,你看siri做了好几年了,也只不过是人工ZZ
,不是针对谁,等真正的贾维斯
出来可能还要个好几十年上百年。
所以那就得设计一个用来描述数据
的语言格式、标准出来,使它易于看懂
,也易于程序去解析
它,于是就有了JSON
。它可以清晰地表示出数据之间的关系或标示某个数据。
{
"a":{
"name":"a",
"child":{
"b":{
"name":"b"
}
}
}
}
对于人来说是不是简单明了清晰可见,对于程序引擎来说,它的序列化
和反序列化
也非常简。
序列化
与反序列化
说人话就是由程序内存中的各种数据类型
,比如说对象
、数组
等,与文本(字符串)
相互转化。
那我们怎么使用它呢?
三、JSON的使用
前端javascript
语言内置了解析和生成JSON的方法,不需要自己花时间去解析——
解析JSON
使用JSON.parse()
方法即可
const jsonStr = `{
"a":{
"name":"a",
"child":{
"b":{
"name":"b"
}
}
}
}`
const obj = JSON.parse(jsonStr)
console.log(obj.a.child.b.name)//b
生成JSON
使用JSON.stringify
方法即可
const obj = {
a:{
name:"a",
child:{
b:{
name:"b"
}
}
}
}
const jsonStr = JSON.stringify(obj)
console.log(jsonStr)
//{"a":{"name":"a","child":{"b":{"name":"b"}}}}
是不是很简单
在其他语言,也有相应的方法供编程者去解析和生成。
描述性语言格式其实还有XML
、HTML
等,而XML
在JSON
出来之前,在传输、存储格式化数据等领域独领风骚。
我们来看看XML——
XML与JSON的对比
XML样子
<a>
<name>a</name>
<child>
<b>
<name>b</name>
</b>
</child>
</a>
XML与JSON对比
- 数据体积——因为多了很多重复标记标签,所以XML体积会比JSON大很多
- 传输速率——当然是JSON体积小传输快
- 可读性——差不多
- 与编程语言的交互性——JSON在javascript中可是亲儿子一样的级别,它和对象数组之间的相互转换使用真的是无缝连接
所以未来的趋势是谁不用说了吧,如果通过这篇文章看懂了JSON,就赶紧使用起来吧