当前位置: 首页 > 科技观察

XML和JSON的优缺点

时间:2023-03-12 03:55:49 科技观察

介绍XML和JSON是当今互联网最常用的两种数据交换格式。XML格式由W3C于1996年提出,JSON格式由DouglasCrockford于2002年提出。虽然这两种格式的设计目的并不相同,但它们通常用于相同的任务,即数据交换。XML和JSON都有很好的文档记录(RFC7159[1]、RFC4825[2]),并且都是人类可读和机器可读的。这两种格式都不强,只是适用的领域不同而已。(LCTT译注:W3C即互联网联盟[3],制定了各种与Web相关的标准,如HTML、CSS等。DouglasCrockford除了制定JSON格式外,还致力于改进JavaScript,开发了一个JavaScript相关工具JSLint[4]和JSMin[5])XML的优点XML相对于JSON有很多优点。两者最大的区别在于XML可以简单地通过给标签添加属性来存储元数据metadata。使用JSON时,您需要创建一个对象并将元数据存储为该对象的成员。虽然两者都可以用于存储元数据的目的,但在这种情况下XML通常是更好的选择,因为JSON的表示可以欺骗客户端程序开发人员,让他们认为数据正在转换为对象。例如,如果你的C++程序需要发送一个带有JSON格式元数据的整数数据,你需要创建一个对象,在对象中使用名称/值对name/value对来记录整数数据的值,然后为每个附加属性添加名称/值对。接收此JSON的程序可能将其作为对象读取,但事实并非如此。虽然这是在JSON中传递元数据的解决方法,但它违反了JSON的核心理念:“JSON的结构无需修改即可与传统编程语言的结构相对应。JSON的结构看起来像传统的编程语言结构。不需要重构。”1虽然后面我会说这也是XML的缺点,但是XML中命名冲突和前缀的处理机制赋予了它JSON不具备的能力。程序员可以通过前缀来给出一个通用的名称给两个不同的实体。2当不同的实体在客户端使用相同的名称时,此功能非常有用。XML的另一个优点是大多数浏览器浏览器可以将其以高度可读和有组织的方式呈现给用户。树结构XML的结构化很容易,浏览器还允许用户展开或折叠树中的元素,这简直就是调试的福音。XML相对于JSON的一个重要优势就是可以记录混合内容。例如,在处理XML中包含结构化标签的字符串时,程序员只需要将标签文本放在标签中就可以了。但是由于JSON只包含数据,所以没有简单的方法来指定标签,虽然有很多方法karounds用于处理元数据,这总是有点滥用。JSON有很多自身的优势。最明显的一点是JSON比XML简洁得多。因为XML需要开始和结束标签,而JSON使用名称/值对来表示数据,使用简单的{和}来标记对象,[和]来标记数组,,来表示数据的分隔,:来表示名称的分隔和价值观。JSON比XML更小、更省时,即使使用gzip压缩也是如此。3正如Sumaray和Makki在他们的实验中指出的那样,JSON在这两个方面都优于XML,Nurseitov、Paulson、Reynolds和Izurieta也是如此。首先,由于JSON文件固有的简单性,JSON总是比包含相同信息的XML更小,这意味着这导致更快的传输和处理速度。其次,无论大小,两组研究45表明序列化和使用JSON的反序列化速度明显快于使用XML。第三,后续研究指出,JSON的处理在CPU资源占用方面也优于XML。研究人员发现,JSON总体上使用的资源较少,在用户空间消耗的CPU较多,在系统空间消耗的CPU较少。这个实验是在RedHat机器上进行的,RedHat机器已经声明它更喜欢使用用户空间中的CPU资源。6毫不奇怪,Sumaray和Makki的研究还表明JSON在移动设备上的表现也优于XML。7这是有道理的,因为JSON消耗的资源更少,而且在移动设备上的功能也不那么强大。JSON的另一个优点是它对对象和数组的表示对应宿主语言宿主语言中的数据结构,比如object对象,record记录,结构struct,dictionary字典,哈希表hashtable,keyedlistkeyedlist还有array数组、vector向量、list列表、对象数组等8虽然这些数据结构也可以用XML表示,只需要调用一个函数就可以完成解析,但往往需要更多的代码才能正确完成XML序列化和反序列化处理。而且,XML对人类来说不如JSON直观,XML标准缺乏对对象和数组标签的明确定义。当结构化标记可以取代嵌套标签时,JSON的优势就突出了。JSON中的花括号和方括号清楚地表明了数据的结构。当然,这个优势也包括上面提到的问题。JSON在表达元数据时不如XML准确。虽然XML支持命名空间和前缀,但这并不意味着JSON不具备处理命名冲突的能力。与XML的前缀相比,它在程序中更简洁、更自然地处理命名冲突。在JSON中,每个对象都在自己的命名空间中,因此不同对象中的元素名称可以任意重复。在大多数编程语言中,不同对象中的成员可以包含相同的名称,因此JSON以对象区分名称的规则处理起来更自然。也许JSON优于XML的部分优势在于JSON是JavaScript的子集,因此在JavaScript代码中解析或包装它是很自然的。虽然这看起来对JavaScript程序非常有用,而其他程序不能直接从中受益,但实际上这个问题已经很好地解决了。目前JSON的网站列表显示了64种不同语言的175种工具,它们都实现了处理JSON所需的功能。虽然我无法评论大多数工具的质量,但它们的存在清楚地表明了开发人员社区对JSON的拥护,并且它们确实使跨不同平台使用JSON变得更加容易。两者的动机简单地说,XML的目标是标记文档。这与JSON的目标相去甚远,因此请尽可能使用XML。它通过使用树状结构和语义包含的文本来表达混合内容来实现这一点。数据结构可以用XML表示,但这不是它的强项。JSON的目标是数据交换的结构化表示。它直接使用对象、数组、数字、字符串和布尔值来执行此操作。这与文档标记语言完全不同。如上所述,JSON本身不支持混合内容记录。这些主流的软件开放API只提供XML:AmazonProductAdvertisingAPIAmazonProductAdvertisingAPI。这些主流API只提供JSON:FacebookGraphAPIFacebookGraphAPI,GoogleMapsAPIGoogleMapsAPI,TwitterAPITwitterAPI,AccuWeatherAPI,PinterestAPI,RedditAPI,FoursquareAPI。这些主流API同时提供XML和JSON:GoogleCloudStorage、LinkedInAPI、LinkedinAPI、FlickrAPI。根据ProgrammableWeb9,10个最流行的API中只有一个是纯XML的,不支持JSON。其他的要么同时支持XML和JSON,要么只支持JSON。这表明大多数应用程序开发人员更喜欢使用支持JSON的API,这大概是因为JSON具有更快的处理速度和良好的声誉,以及与XML相比更轻的重量。此外,大多数API只传递数据而不传递文档,因此JSON更合适。例如,Facebook专注于用户交流和发帖,GoogleMaps主要处理坐标和地图信息,而AccuWeather只提供天气数据。总而言之,虽然不能说天气API更多地使用JSON还是XML,但趋势显然偏向于JSON。1011这些主流桌面软件仍然只使用XML:MicrosoftWord、ApacheOpenOffice、LibraOffice。因为这些软件需要考虑引用、格式化、存储等,XML比JSON有优势。此外,这三个程序都支持混合内容,而JSON在这方面不如XML。例如,当用户使用MicrosoftWord编辑一篇论文时,用户需要使用不同的文字字体、文字大小、文字颜色、页边距、段落格式等,而XML结构化的组织形式和标签属性天生就可以表达这些信息。支持XML的主流数据库有:IBMDB2、MicrosoftSQLServer、OracleDatabase、PostgresSQL、BaseX、eXistDB、MarkLogic、MySQL。这些是支持JSON的主要数据库:MongoDB、CouchDB、eXistDB、Elastisearch、BaseX、MarkLogic、OrientDB、OracleDatabase、PostgreSQL、Riak。长期以来,SQL和关系数据库主导着数据库市场。甲骨文和微软等软件巨头提供此类数据库,但近年来NoSQL数据库在开发人员中越来越受欢迎。或许恰逢JSON的流行,大多数NoSQL数据库都支持JSON,MongoDB、CouchDB、Riak等数据库甚至使用JSON来存储数据。这些数据库有两个重要的属性使其适用于现代网站:一是它们比关系数据库更容易扩展和更具扩展性;二是它们旨在针对网络运行所需的核心组件。12由于JSON更轻量并且是JavaScript的子集,因此它非常适合NoSQL数据库并使这两个特性更容易实现。此外,许多较旧的关系数据库都添加了JSON支持,例如Oracle数据库和PostgreSQL。由于XML和JSON之间的转换比较麻烦,因此大多数开发人员会在应用中直接使用JSON,因此开发数据库的公司有理由支持JSON。(LCTT译注:NoSQL是区别于传统关系型数据库的数据库管理系统的总称。参考来源[6])13未来互联网的各种变化中,最值得期待的是物联网(IoT).这将为互联网带来除计算机之外的大量设备,例如手表、温度计、电视、冰箱等等。这一势头发展良好,有望在不久的将来迎来爆发式增长。据估计,到2020年,将有260亿至2000亿台物联网设备连接到互联网。1415几乎所有物联网设备都是小型设备,因此功能远不及笔记本电脑或台式计算机,而且大多数是嵌入式系统。因此,当他们需要与互联网上的系统交换数据时,更轻量、更快速的JSON自然比XML更受青睐。16受益于JSON在Web上的快速采用,这些新的物联网设备更有可能从使用JSON而不是XML中受益。这是梅特卡夫定律的经典示例,无论是XML还是JSON,还是其他一些全新的格式,现有设备和新设备都将受益于支持最广泛使用的格式。Node.js是一个服务器端JavaScript框架。随着它的诞生和快速发展,与MongoDB等NoSQL数据库一起,使得开发全栈JavaScript成为可能。这些都预示着JSON的光明前景。这些软件的出现使得在全栈开发的每一个环节都使用JSON成为可能,这将使应用程序更轻便,响应更快。这也是任何应用程序的追求之一,因此全栈JavaScript的趋势不会在不久的将来消失。17此外,另一个应用程序开发趋势是从SOAP转向REST。181920XML和JSON都可以用于REST,但是SOAP只能使用XML。从这些趋势可以推断,JSON的发展将统一Web的信息交换格式,而XML的使用率将不断下降。虽然JSON不应该被夸大,因为XML在web中仍然被广泛使用,而且它是SOAP的唯一选择,考虑到SOAP向REST的迁移,NoSQL数据库和全栈JavaScript的兴起,JSON的优秀性能,我相信JSON很快就会在Web开发中超越XML。至于其他方面,XML优于JSON的情况并不多。角注1。介绍JSON[7]2。XML教程[8]3.JSON与XML:关于冗长的一些硬性数字[9]4。JSON和XML数据交换格式的比较:案例研究[10]5.在移动平台上实现最佳效率的数据序列化格式比较[11]6。JSON和XML数据交换格式的比较:案例研究[10]7。在移动平台上实现最佳效率的数据序列化格式比较[11]8。介绍JSON[7]9。最受欢迎的API:至少有一个会让您大吃一惊[12]10。为什么JSON会继续将XML排除在外[13]11。数以千计的API描绘了Web的光明未来[14]12。为什么JSON会继续将XML排除在外[13]13。JSON如何激发NoSQL–并将回归RDBMSfold[15]14。“物联网”的简单解释[16]15。Proofpoint揭露物联网(IoT)网络攻击[17]16。为什么JSON会继续将XML排除在外[13]17.为什么JSON将继续把XML排挤出局[13]18。数以千计的API描绘了Web的光明未来[14]19。3,000个WebAPI:来自快速增长目录的趋势[18]20。REST如何在Web上取代SOAP:它对您意味着什么[19]