JSON作为目前Web主流的数据交换格式,是每个IT技术人员都必须要了解的一种数据交换格式。尤其是在Ajax和REST技术的大行其道的当今,JSON无疑成为了数据交换格式的首选

今天大家就和猪哥一起来学习一下JSON的相关知识吧!

一、XML

在讲JSON之前,我觉得有必要先带大家了解一下XML(Extensible Markup Language 可扩展标记语言),因为JSON正在慢慢取代XML。

1.XML起源

早期Web发展和负载的数据量并不是很大,所以基本靠HTML(1989诞生)可以解决。但是随着Web应用的不断壮大,HTML的一些缺点也慢慢显现,如:可读性差、解析时间长、数据描述性差等。

1998年2月10日,W3C(World WideⅥiebConsortium,万维网联盟)公布XML 1.0标准,XML诞生了。

XML使用一个简单而又灵活的标准格式,为基于Web的应用提供了一个描述数据和交换数据的有效手段。但是,XML并非是用来取代HTML的。HTML着重如何描述将文件显示在浏览器中,它着重描述如何将数据以结构化方式表示。

XML简单易于在任何应用程序中读/写数据,这使XML很快成为数据交换的唯一公共语言,所以XML被广泛应用。

注意: XML是一种数据交换的格式,并不是编程语言。而且他是跨语言的数据格式,目前绝大多数编程语言均支持XML。

2.XML实例

XML究竟怎么用?是什么样子的?我们来举一个简单的例子吧!

A公司要和B公司业务对接(A公司要获取B公司的用户基本信息),B公司提供接口让A公司调用,A、B公司对接的开发人员会提前沟通好这个接口的:URL、传参、返回数据、异常等等。

但是也许两个公司使用的技术栈并不相同,所以支持的据格式也可能不同。为了解决因技术栈不同带来的数据格式不同问题,A、B公司的开发协商使用一种通用的数据格式来传输,于是他们想到了XML。

  1. 假设现在A公司需要名称叫pig的用户信息,于是A公司调用B公司的接口,并传参数name=pig。
  2. 然后B公司接口收到请求后,将用户信息从数据库拿出来,然后封装成下面的XML格式,然后再返回给A公司。
  3. 最后A公司收到返回后,使用XML库解析数据即可
<?xml version="1.0" encoding="UTF-8"?>
<person><name>pig</name><age>18</age><sex>man</sex><hometown><province>江西省</province><city>抚州市</city><county>崇仁县</county></hometown>
</person>

3.XML十字路口

虽然XML标准本身简单,但与XML相关的标准却种类繁多,W3C制定的相关标准就有二十多个,采用XML制定的重要的电子商务标准就有十多个。这给软件开发工程师带来了极大的麻烦!

随着AJax(之前叫XMLHTTP,2005年后才叫Ajax)技术的流行,XML的弊端也越来越显现:大家都知道XML实现是基于DOM树实现的,而DOM在各种浏览器中的实现细节不尽相同,所以XML的跨浏览器兼容性并不好,所以急需一种新的数据负载格式集成到HTML页面中以满足Ajax的要求!

二、JSON

前面我们说了随着Ajax的流行,而各种浏览器对DOM的实现细节不尽相同,所以会出现兼容性问题,这对前端开发同学来讲真的是灾难。因为一个功能可能需要用代码去兼容各种不同的浏览器,还要调试,工作量巨大。

1.JSON诞生

如何才能将数据整合到HTML中又解决浏览器兼容性问题呢?答案就是:利用所有主流浏览器中的一种通用组件——JavaScript引擎。这样只要创造一种JavaScript引擎能识别的数据格式就可以啦!

2001 年 4 月,首个 JSON 格式的消息被发送出来。此消息是从旧金山湾区某车库的一台计算机发出的,这是计算机历史上重要的的时刻。道格拉斯·克罗克福特(Douglas Crockford) 和 奇普·莫宁斯达(Chip Morningstar) 是一家名为 State Software 的技术咨询公司的联合创始人(后来都在雅虎任职),他们当时聚集在 Morningstar 的车库里测试某个想法,发出了此消息。

document.domain = 'fudco'; parent.session.receive( { to: "session", do: "test", text: "Hello world" }
)

熟悉js的同学是不是也很惊讶,第一个 JSON 消息它明显就是 JavaScript!实际上,Crockford 自己也说过他不是第一个这样做的人。网景(Netscape )公司的某人早在 1996 年就使用 JavaScript 数组字面量来交换信息。因为消息就是 JavaScript,其不需要任何特殊解析工作,JavaScript 解释器就可搞定一切。

最初的 JSON 信息实际上与 JavaScript 解释器发生了冲突。JavaScript 保留了大量的关键字(ECMAScript 6 版本就有 64 个保留字),Crockford 和 Morningstar 无意中在其 JSON 中使用了一个保留字:do。因为 JavaScript 使用的保留字太多了,所以Crockford决定:既然不可避免的要使用到这些保留字,那就要求所有的 JSON 键名都加上引号。被引起来的键名会被 JavaScript 解释器识别成字符串。这就为什么今天 JSON 键名都要用引号引起来的原因。


这种数据格式既然可以被JavaScript引擎识别,那就解决了XML带来的各种浏览器兼容性问题,所以这种技术完全可以推广出去,于是Crockford 和 Morningstar 想给其命名为 “JSML”,表示JavaScript 标记语言(JavaScript Markup Language)的意思,但发现这个缩写已经被一个名为 Java Speech 标记语言的东西所使用了。所以他们决定采用 “JavaScript Object Notation”,缩写为 JSON,至此JSON正式诞生。

2.JSON发展

2005 年,JSON 有了一次大爆发。那一年,一位名叫 Jesse James Garrett 的网页设计师和开发者在博客文章中创造了 “AJAX” 一词。他很谨慎地强调:AJAX 并不是新技术,而是 “好几种蓬勃发展的技术以某种强大的新方式汇集在一起。” AJAX 是 Garrett 给这种正受到青睐的 Web 应用程序的新开发方法的命名。他的博客文章接着描述了开发人员如何利用 JavaScript 和 XMLHttpRequest 构建新型应用程序,这些应用程序比传统的网页更具响应性和状态性。他还以 Gmail 和 Flickr 网站已经使用 AJAX 技术作为了例子。

当然了,“AJAX” 中的 “X” 代表 XML。但在随后的问答帖子中,Garrett 指出,JSON 可以完全替代 XML。他写道:“虽然 XML 是 AJAX 客户端进行数据输入、输出的最完善的技术,但要实现同样的效果,也可以使用像 JavaScript Object Notation(JSON)或任何类似的结构数据方法等技术。 ”

这时JSON便在国外的博客圈、技术圈慢慢流行起来!

2006 年,Dave Winer,一位高产的博主,他也是许多基于 XML 的技术(如 RSS 和 XML-RPC)背后的开发工程师,他抱怨到 JSON 毫无疑问的正在重新发明 XML。

Crockford 阅读了 Winer 的这篇文章并留下了评论。为了回应 JSON 重新发明 XML 的指责,Crockford 写到:“重造轮子的好处是可以得到一个更好的轮子”。

3.当今JSON地位

当今的JSON 已经占领了全世界。绝大多数的应用程序彼此通过互联网通信时,都在使用 JSON。它已被所有大型企业所采用:十大最受欢迎的 web API 接口列表中(主要由 Google、Facebook 和 Twitter 提供),仅仅只有一个 API 接口是以 XML 的格式开放数据的。

JSON 也在程序编码级别和文件存储上被广泛采用:在 Stack Overflow上,关于JSON的问题越来越多,下图是关于Stack Overflow上不同数据交换格式的问题数和时间的曲线关系图。
从上图我们可以看出在Stack Overflow上越来越多JSON的问题,从这里也可以反映出JSON越来越流行!

更详细的关于创造JSON的故事可阅读:https://www.jianshu.com/p/62a856367d2d

4.JSON实例

还是以上面A、B公司业务对接为例子,两边的开发人员协商一种通用的数据交换格式,现在有XML与JSON比较流行的两种数据格式,于是开发人员又将用户信息以JSON形式展现出来,然后比较两种数据格式:

{"person": {"name": "pig","age": "18","sex": "man","hometown": {"province": "江西省","city": "抚州市","county": "崇仁县"}}
}

比较XML与JSON的数据格式之后,开发人员发现:JSON可阅读性、简易性更好而且相同数据负载JSON字符数更少,所以两个开发人员一致同意使用JSON作为接口数据格式!

而且还有重要的一点,在编写XML时,第一行需要定义XML的版本,而JSON不存在版本问题,格式永远不变!

三、总结

由于篇幅原因我们今天只学习了JSON的诞生和起源相关知识,知道了JSON的诞生是因为XML无法满足Ajax对浏览器兼容性问题,所以就有人想创造一种浏览器通用组件:JavaScript引擎 能识别的数据格式,这样就可以解决浏览器不兼容问题,所以就从Js数据格式中提取了一个子集,取名为JSON!

我们还知道了为什么JSON键为什么需要用双引号引起来,是因为JS中存在许多的关键字和保留关键字,为了避免与JS关键字冲突,所以Crockford就要求在所有的键名上加上双引号,这样JS引擎会将其识别为字符串,就避免与JS中关键字冲突!

下期我们会详细介绍JSON数据结构、JSON序列化、JSON在Python中的使用等知识。

了解技术诞生与发展背后的故事同样重要,因为这些可以作为你吹逼的资本!

参考资料:
百度百科:XML
Daniel Rubio:JSON 简介
https://www.jianshu.com/p/62a856367d2d

JSON——IT技术人员都必须要了解的一种数据交换格式相关推荐

  1. XML和JSON两种数据交换格式的比较

    目前,在web开发领域,主要的数据交换格式有XML和JSON,对于XML相信每一个web developer都不会感到陌生: 相比之下,JSON可能对于一些新步入开发领域的新手会感到有些陌生,也可能你 ...

  2. Json学习总结(7)——JSON为什么是数据交换格式的首选

    一.XML 在讲JSON之前,我觉得有必要先带大家了解一下XML(Extensible Markup Language 可扩展标记语言),因为JSON正在慢慢取代XML. 1.XML起源 早期Web发 ...

  3. Ajax--概述、xhr对象的常用属性和方法、xhr的常用事件、xhr对象发送POST请求、xhr对象发送GET请求、xhr对象的兼容性问题、数据交换格式(XML、JSON)

    一.概述 1.1 发展历程 在开始之前先来看一下Ajax的工作原理吧,如下图所示: Ajax全称Asynchronous javascript and xml(异步 JavaScript 和 XML) ...

  4. 前端与服务器通讯的数据交换格式XML 、JSON

    数据交换格式 就是服务器端与客户端之间进行数据传输与交换的格式. 前端领域,经常提及的两种数据交换格式分别是XML(使用较少)和JSON(主要) XML XML和HTML的区别 都是标记语言,但是,他 ...

  5. Ajax学习(3)XMLHttpRequest的使用+数据交换格式(JSON)

    XMLHttpRequest的使用 XMLHttpRequest(简称 xhr)是浏览器提供的 Javascript 对象,可以请求服务器上的数据资源.(jQuery 中的 Ajax 函数,就是基于 ...

  6. 为什么多迪技术人员都喜欢用python写爬虫?

    有更加成熟的一种爬虫脚本语言,而非框架.是通用的爬虫软件ForeSpider,内部自带了一套爬虫脚本语言.很多同学学php的,但是也自学过python,对php了解还是比较深的,为什么多迪技术人员都喜 ...

  7. XML和JSON 数据交换格式

    为什么80%的码农都做不了架构师?>>>    一.什么是数据交换格式? 客户端与服务器常用数据交换格式xml.json.html 二.数据交换格式应用场景 移动端(安卓.IOS)通 ...

  8. 数据交换格式Json与XML

    什么是数据交换格式: 主流的有Json.XML.HTML. 数据交换格式的应用场景: 移动端(安卓,IOS)通讯方式采用http协议+Json格式的restful风格. 很多互联网公司都是用Http协 ...

  9. 于数据交换格式XML和JSON的比较

    目前,在web开发领域,主要的数据传输格式有XML和JSON,对于XML相信每一个web developer都不会感到陌生:相比之下,JSON可能对于一些新步入开发领域的新手会感到有些陌生,也可能你之 ...

最新文章

  1. 虚拟化正是云计算所依托的基石
  2. nginx服务器安全,要注意的地方
  3. 服务器一拷贝文件就死机,u盘拷贝文件时导致电脑死机怎么办【解决方法】
  4. 递归_三要素_基础算法必备
  5. mysql重建索引_mysql创建、删除、重建、删除索引的操作命令的一些总结
  6. Java引入依赖aar_Grade将依赖的jar 打包进aar
  7. 快速删除大文件 多级目录 同步并删除 rsync
  8. java布尔三目运算符_Java关系运算符,boolean运算符,三元运算符
  9. ReiBoot Pro for Mac(iOS系统修复软件)
  10. linux定时备份Mysql
  11. ucosii 知识点总结
  12. Python 中的 __str__ 与 __repr__ 到底有什么差别
  13. cad导出pdf_CAD如何批量导出PDF文件?别说PDF了!GIF我都能给你导出来
  14. 【原创】驳罗素《我为什么不是基督徒》
  15. 相机模型(针孔、广角)
  16. 时空恋旅人 豆瓣影评
  17. insmod: error inserting 'memdev.ko': -1 File exists
  18. form表单中onclick事件和onsubmit事件的执行顺序
  19. AI溃败,被Dota2职业战队打蠢!独家专访OpenAI:我们发现一个Bug
  20. 结合若依框架实现微信小程序授权登录

热门文章

  1. 8类网线利弊_超6类网线和7类网线有何区别?有何用途?家用电脑,看这
  2. lua和unity如何交互_Unity中C#对象与Lua之间交互的原理
  3. 四十七、Ansible自动化入门
  4. 九十六、轻松搞定Python中的PPT办公自动化系列
  5. 【Python金融量化 1- 100 】三、流行股票指数
  6. xp装linux一键安装教程图解,XP下硬盘安装CentOS 6.0图解教程
  7. 今日arXiv精选 | 12篇EMNLP 2021最新论文
  8. IDRLnet: 基于内嵌物理知识神经网络的开源求解框架
  9. 直播 | 清华大学博士生姚远:对抗语言游戏
  10. 卡片游戏 数学期望