JSON 是什么?

(本文精髓在最后一节)

JSON 绝对不是对象,请问

  1. JSON 是什么?
  2. "null" 是 JSON 吗?"1" 是 JSON 吗?
  3. JSON 与 JS 对象的区别是什么?

JSON 是什么?

如果你在 Google 搜索 JSON,那么一眼就会看到 JSON 的官网 http://json.org

官网会明明白白的告诉你,JSON 是一种数据格式。

什么是格式?你可以理解为语法。JSON 的格式灵感来自于 JS 对象字面量的语法,但是两者没有任何关联。

这种格式可以描述三种数据。

1. object(无序的「键-值」集合)。

语法如下:

 

这个图叫做语法图,你可以讲其想象成铁轨,有一列火车从左往右行驶。

 

这列火车遇到的第一个符号是 { ,所以对象语法的第一个符号也必须是 { 。

如果继续直行,会分别遇到 string、冒号和 value,所以对应的文本内容是 { string: value 。

然后你可以选择直行或者往下拐,最后到达终点。

把旅途中遇到的所有符号连起来,就是完整的语法。

比如下面三种写法都可以表示 object

{}
{"key1": "value1"} // string 对应 "key1",value 对应 "value1",后面会讲
{"key1": "value1", "key2": "value2"}

2. array(有序的值集合)

语法如下:

 

下面三种写法都可以表示 array

 

[]
[1]
[1,"hi"]

3. value

 

value 对应对象语法图里的 value 和数组语法图里 value,value 也可以是 object 或 array,所以下面的语法成立:

 

{"key1": { "key2" : "value2" } }
[ 1, [ 2, 3 ] ]

另外值还可以是 string、number、true、false 和 null。

string 的语法如下:

 

你可能奇怪为什么 string 的语法这么复杂,我举例来说明你就明白了:

 

"你好"
"\"你好\""
"\\你好\\"
"\/你好\/"
"\b\f\n\r\t特殊符号"
"\u4f60用编码表示字符"

上面都是合法的 string。这也是「JSON 中字符串必须使用双引号」的原因——规定如此。

number 的语法如下,有兴趣可以自己走一遍:

 

另外需要特殊提醒一下,true、false 和 null 都是合法的 JSON。

 

JSON 和 JS Object 的区别

简单来说,两种没有任何关联。

JSON 语法的作者是道格拉斯(Douglas Crockford),JS 语法的作者是布兰登・艾奇(Brendan Eich)。道格拉斯发明 JSON 的时候参考了 JS 的对象语法,仅此而已。

如果硬要说区别:

1. JSON 的字符串必须用双引号。

2. JSON 无法表示 undefined,只能表示 "undefined"

3. JSON 无法表示函数

4. JSON 的对象语法不能有引用

 

以上,就是对 JSON 的详细介绍。

更多前端知识,尽在前端交流 4 群:392054247

 

本文看似是在说 JSON,实际上在说什么?

实际上我想告诉一些初学者,不要「道听途说」学编程。

你听别人说 JSON 是一种数据格式,你就信了,也不去 Google 一下,也不去找一下 JSON 的出处、发明者和规格文档,你只是在「道听途说学编程」,这是很蠢的行为。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值