JSON 是一种用于数据交换的文本格式(本质是一种文件组织方式,比如你熟悉的txt, csv, doc,docx文件等等),目的是取代繁琐笨重的XML格式。这种格式不仅人很容易进行阅读和编写,同时机器也很容易解析和生成,是当前十分流行的数据格式,尤其是在前端领域。JSON是一种传递对象的语法,对象可以是name/value对、数组和其他对象,现在浏览器都自带json解析。
简单来说json就是一种客户端与服务器都可以识别及解析的数据格式,避免了难以定义数据格式的麻烦。比如:如果你每个客户端想给服务器一次发送名称,年龄,密码等信息,那么服务器用什么数据结构来接收呢?有人就说用结构体,但是结构体中各个变量我们定义多大呢?是吧,多大都不合适,所以有了json这种统一的数据格式,双方都根据json的规则进行解析就可以获取到双方发送的字节流(网络中用字节流传输),而不必为定义每个数据的大小而苦恼(相当于发送接收都是一个json对象不存在大小不一致)。可以将json理解为一个容器,我们按照容器的打开方式就可以打开容器获取到数据。
举个栗子(下面提供一小段json代码)?
{
"firstname":"John",
"lastname":"smith",
"isAlive":true,
"age":25,
"address":{
"streetaddress":"21 street", //街道地址
"city":"XI'AN", //城市地址
},
"phonenum":{
{
"type":"home", //家庭电话
"number": "212555666"
},
{
"type":"office", //公司电话
"number":"645111999"
}
},
"children":{
[{"name":"mary","age",2},{"name":"bob","age":4}] //数组
},
"spouse":null
}
这是个json,存储的数据描述了一个人John Smith的一些个人信息,比如姓名,是否活着,年龄,地址以及电话号码等信息。其中,地址address和电话号码phonenum呢,下面又包含了街道、城市,家庭电话、办公电话信息。
如果之前只接触过存储在Excel或者sql server等结构化数据库中的结构化数据,那么第一次看到json格式的数据,一定觉得很新颖。这种数据组织方式,条理清晰,能更好的表示自然界中人或物等实体的属性关系。可以理解为一种树状结构,一棵有枝干,枝干上有叶子的树。
你看懂了吧?那么当你再看到它时就知道它是JSON了。主要部分:
花括弧,方括号,冒号和逗号
<1>什么是XML?
XML也是一种格式规范,是一种包含了数据以及数据说明的文本格式规范,它是可扩展标记语言。扩展标记语言不是超文本标记语言(eg:HTML)的替代而是对超文本标记语言的补充。XML不像HTML这种超文本标记语言用于网页的编辑(被设计用来显示数据,其焦点是数据的外观),它主要用于数据格式化存储(被设计用来传输和存储数据,其焦点是数据的内容),现在用的比较多的是作为配置文件(表述底层数据)或者数据结构定义(数据载体),在网络中传输,是网络传输中间语言。
举个栗子说明一下:
比如,我们要给对方传输一段数据,数据内容是“too young,too simple,sometimes naive”,要将这段话按照属性拆分为三个数据的话,就是,年龄too young,阅历too simple,结果sometimes naive。
我们都知道程序不像人,可以体会字面意思,并自动拆分出数据,因此,我们需要帮助程序做拆分,因此出现了各种各样的数据格式以及拆分方式。
比如,可以是这样的
数据为“too young,too simple,sometimes naive”
然后按照逗号拆分,第一部分为年龄,第二部分为阅历,第三部分为结果。这种方式可以用来容纳数据并能够被解析,但是不直观,通用性也不好。基于这种情况,出现了xml这种数据格式, 上面的数据用XML表示的话
可以是这样
也可以是这样
两种方式都是xml,都很直观,附带了对数据的说明,并且具备通用的格式规范可以让程序做解析。
与普通的纯文本保存数据不同的是XML与json做了数据的拆分和归类,以便让计算程序区分各部分的内容
拆分方式有多种,可以这样来表述:
xml可用于存储,传输,交换数据,因为只描述/关心数据的结构,可以做到平台无关,实现跨平台,所以Windows平台喜欢,Linux平台喜欢,各种系统(包括非操作系统)都喜欢用它,它可拓展性好,对人类友好,结构清晰易读。
小知识:
记得好像据说,最早是在万维网刚出现的时候,为了在万维网上传输数据,接收方能造理解,人们创了这种自带格式说明的文件格式。当时人们期待着xml能一统天下,结果后来html和浏览器出现了,html成了标准的网络协议,就没xml什么事了。现在xml就是个工具,干啥都行。可以存储并检索数据,可以做传输约定格式,可以做配置文件。
<2>json与xml的相同点及json比xml好在哪里?
首先XML和JSON都使用结构化方法来标记数据,而且它们的值都是可列举的,是“人类可读”的,两者都可以嵌套(有层级的,可以在值里再存放值)),而且都能被多种的编程语言解析和使用,都能使用AJAX方法来传递(例如httpWebRequest) 。
但是JSON 简单的语法格式和清晰的层次结构明显要比 XML 容易阅读,并且在数据交换方面,由于 JSON 所使用的字符要比 XML 少得多(相比 XML 文件更小,相比XML确实更加轻量级),可以大大得节约传输数据所占用得带宽。XML有时候描述东西太费劲,验证复杂,而且有大量的冗余,尤其是结束标记(