作者
猪哥
责编
Elle
JSON作为目前Web主流的数据交换格式,是每个IT技术人员都必须要了解的一种数据交换格式。尤其是在Ajax和REST技术的大行其道的当今,JSON无疑成为了数据交换格式的首选!
XML
在讲JSON之前,我觉得有必要先带大家了解一下XML(ExtensibleMarkupLanguage可扩展标记语言),因为JSON正在慢慢取代XML。
1.XML起源
早期Web发展和负载的数据量并不是很大,所以基本靠HTML(诞生)可以解决。但是随着Web应用的不断壮大,HTML的一些缺点也慢慢显现,如:可读性差、解析时间长、数据描述性差等。
年2月10日,W3C(WorldWideⅥiebConsortium,万维网联盟)公布XML1.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。
假设现在A公司需要名称叫pig的用户信息,于是A公司调用B公司的接口,并传参数name=pig;然后B公司接口收到请求后,将用户信息从数据库拿出来,封装成下面的XML格式,再返回给A公司;最后A公司收到返回后,使用XML库解析数据即可。?xmlversion=1.0encoding=UTF-8?personnamepig/nameage18/agesexman/sexhometownprovince江西省/provincecity抚州市/citycounty崇仁县/county/hometown/person
3.XML十字路口
虽然XML标准本身简单,但与XML相关的标准却种类繁多,W3C制定的相关标准就有二十多个,采用XML制定的重要的电子商务标准就有十多个。这给软件开发工程师带来了极大的麻烦!
随着AJax(之前叫XMLHTTP,年后才叫Ajax)技术的流行,XML的弊端也越来越显现:大家都知道XML实现是基于DOM树实现的,而DOM在各种浏览器中的实现细节不尽相同,所以XML的跨浏览器兼容性并不好,所以急需一种新的数据负载格式集成到HTML页面中以满足Ajax的要求!
JSON
前面我们说了随着Ajax的流行,而各种浏览器对DOM的实现细节不尽相同,所以会出现兼容性问题,这对前端开发同学来讲真的是灾难。因为一个功能可能需要用代码去兼容各种不同的浏览器,还要调试,工作量巨大。
1.JSON诞生
如何才能将数据整合到HTML中又解决浏览器兼容性问题呢?答案就是:利用所有主流浏览器中的一种通用组件——JavaScript引擎。这样只要创造一种JavaScript引擎能识别的数据格式就可以啦!
年4月,首个JSON格式的消息被发送出来。此消息是从旧金山湾区某车库的一台计算机发出的,这是计算机历史上重要的的时刻。道格拉斯·克罗克福特(DouglasCrockford)和奇普·莫宁斯达(ChipMorningstar)是一家名为StateSoftware的技术咨询公司的联合创始人(后来都在雅虎任职),他们当时聚集在Morningstar的车库里测试某个想法,发出了此消息。
document.domain=fudco;parent.session.receive({to:session,do:test,text:Helloworld})
熟悉js的同学是不是也很惊讶,第一个JSON消息它明显就是JavaScript!实际上,Crockford自己也说过他不是第一个这样做的人。网景(Netscape)公司的某人早在年就使用JavaScript数组字面量来交换信息。因为消息就是JavaScript,其不需要任何特殊解析工作,JavaScript解释器就可搞定一切。
最初的JSON信息实际上与JavaScript解释器发生了冲突。JavaScript保留了大量的关键字(ECMAScript6版本就有64个保留字),Crockford和Morningstar无意中在其JSON中使用了一个保留字:do。因为JavaScript使用的保留字太多了,所以Crockford决定:既然不可避免的要使用到这些保留字,那就要求所有的JSON键名都加上引号。被引起来的键名会被JavaScript解释器识别成字符串。这就为什么今天JSON键名都要用引号引起来的原因。
这种数据格式既然可以被JavaScript引擎识别,那就解决了XML带来的各种浏览器兼容性问题,所以这种技术完全可以推广出去,于是Crockford和Morningstar想给其命名为“JSML”,表示JavaScript标记语言(JavaScriptMarkupLanguage)的意思,但发现这个缩写已经被一个名为JavaSpeech标记语言的东西所使用了。所以他们决定采用“JavaScriptObjectNotation”,缩写为JSON,至此JSON正式诞生。
2.JSON发展
年,JSON有了一次大爆发。那一年,一位名叫JesseJamesGarrett的网页设计师和开发者在博客文章中创造了“AJAX”一词。他很谨慎地强调:AJAX并不是新技术,而是“好几种蓬勃发展的技术以某种强大的新方式汇集在一起。”AJAX是Garrett给这种正受到青睐的Web应用程序的新开发方法的命名。他的博客文章接着描述了开发人员如何利用JavaScript和XMLHttpRequest构建新型应用程序,这些应用程序比传统的网页更具响应性和状态性。他还以Gmail和Flickr网站已经使用AJAX技术作为了例子。
当然了,“AJAX”中的“X”代表XML。但在随后的问答帖子中,Garrett指出,JSON可以完全替代XML。他写道:“虽然XML是AJAX客户端进行数据输入、输出的最完善的技术,但要实现同样的效果,也可以使用像JavaScriptObjectNotation(JSON)或任何类似的结构数据方法等技术。”
这时JSON便在国外的博客圈、技术圈慢慢流行起来!
年,DaveWiner,一位高产的博主,他也是许多基于XML的技术(如RSS和XML-RPC)背后的开发工程师,他抱怨到JSON毫无疑问的正在重新发明XML。
Crockford阅读了Winer的这篇文章并留下了评论。为了回应JSON重新发明XML的指责,Crockford写到:“重造轮子的好处是可以得到一个更好的轮子”。
3.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不存在版本问题,格式永远不变!
4.当今JSON地位
当今的JSON已经占领了全世界。绝大多数的应用程序彼此通过互联网通信时,都在使用JSON。它已被所有大型企业所采用:十大最受欢迎的webAPI接口列表中(主要由Google、Facebook和Twitter提供),仅仅只有一个API接口是以XML的格式开放数据的。
JSON也在程序编码级别和文件存储上被广泛采用:在StackOverflow上,关于JSON的问题越来越多,下图是关于StackOverflow上不同数据交换格式的问题数和时间的曲线关系图。
从上图我们可以看出在StackOverflow上越来越多JSON的问题,从这里也可以反映出JSON越来越流行!
更详细的关于JSON的故事可阅读: