JSON与XML的区别比较

1.定义介绍

(1).XML定义
扩展标记语言 (Extensible Markup Language, XML) ,用于标记电子文件使其具有结构性的标记语言,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。 XML使用DTD(document type definition)文档类型定义来组织数据;格式统一,跨平台和语言,早已成为业界公认的标准。
XML是标准通用标记语言 (SGML) 的子集,非常适合 Web 传输。XML 提供统一的方法来描述和交换独立于应用程序或供应商的结构化数据。

(2).JSON定义
JSON(JavaScript Object Notation)一种轻量级的数据交换格式,具有良好的可读和便于快速编写的特性。可在不同平台之间进行数据交换。JSON采用兼容性很高的、完全独立于语言文本格式,同时也具备类似于C语言的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)体系的行为。这些特性使JSON成为理想的数据交换语言。
JSON基于JavaScript Programming Language , Standard ECMA-262 3rd Edition - December 1999 的一个子集。

2.XML和JSON优缺点

(1).XML的优缺点
<1>.XML的优点
  A.格式统一,符合标准;
  B.容易与其他系统进行远程交互,数据共享比较方便。
<2>.XML的缺点
  A.XML文件庞大,文件格式复杂,传输占带宽;
  B.服务器端和客户端都需要花费大量代码来解析XML,导致服务器端和客户端代码变得异常复杂且不易维护;
  C.客户端不同浏览器之间解析XML的方式不一致,需要重复编写很多代码;
  D.服务器端和客户端解析XML花费较多的资源和时间。

(2).JSON的优缺点
<1>.JSON的优点:
  A.数据格式比较简单,易于读写,格式都是压缩的,占用带宽小;
  B.易于解析,客户端JavaScript可以简单的通过eval()进行JSON数据的读取;
  C.支持多种语言,包括ActionScript, C, C#, ColdFusion, Java, JavaScript, Perl, PHP, Python, Ruby等服务器端语言,便于服务器端的解析;
  D.在PHP世界,已经有PHP-JSON和JSON-PHP出现了,偏于PHP序列化后的程序直接调用,PHP服务器端的对象、数组等能直接生成JSON格式,便于客户端的访问提取;
  E.因为JSON格式能直接为服务器端代码使用,大大简化了服务器端和客户端的代码开发量,且完成任务不变,并且易于维护。
<2>.JSON的缺点
  A.没有XML格式这么推广的深入人心和喜用广泛,没有XML那么通用性;
  B.JSON格式目前在Web Service中推广还属于初级阶段。

3.XML和JSON的优缺点对比

(1).可读性方面。
JSON和XML的数据可读性基本相同,JSON和XML的可读性可谓不相上下,一边是建议的语法,一边是规范的标签形式,XML可读性较好些。
(2).可扩展性方面。
XML天生有很好的扩展性,JSON当然也有,没有什么是XML能扩展,JSON不能的。
(3).编码难度方面。
XML有丰富的编码工具,比如Dom4j、JDom等,JSON也有json.org提供的工具,但是JSON的编码明显比XML容易许多,即使不借助工具也能写出JSON的代码,可是要写好XML就不太容易了。
(4).解码难度方面。
XML的解析得考虑子节点父节点,让人头昏眼花,而JSON的解析难度几乎为0。这一点XML输的真是没话说。
(5).流行度方面。
XML已经被业界广泛的使用,而JSON才刚刚开始,但是在Ajax这个特定的领域,未来的发展一定是XML让位于JSON。到时Ajax应该变成Ajaj(Asynchronous Javascript and JSON)了。
(6).解析手段方面。
JSON和XML同样拥有丰富的解析手段。
(7).数据体积方面。
JSON相对于XML来讲,数据的体积小,传递的速度更快些。
(8).数据交互方面。
JSON与JavaScript的交互更加方便,更容易解析处理,更好的数据交互。
(9).数据描述方面。
JSON对数据的描述性比XML较差。
(10).传输速度方面。
JSON的速度要远远快于XML。

4.XML与JSON数据格式比较

(1).关于轻量级和重量级
轻量级和重量级是相对来说的,那么XML相对于JSON的重量级体现在哪呢?应该体现在解析上,XML目前设计了两种解析方式:DOM和 SAX
<1>.DOM
DOM是把一个数据交换格式XML看成一个DOM对象,需要把XML文件整个读入内存,这一点上JSON和XML的原理是一样的,但是XML要考虑父节点和子节点,这一点上JSON的解析难度要小很多,因为JSON构建于两种结构:key/value,键值对的集合;值的有序集合,可理解为数组;
<2>.SAX
SAX不需要整个读入文档就可以对解析出的内容进行处理,是一种逐步解析的方法。程序也可以随时终止解析。这样,一个大的文档就可以逐步的、一点一点的展现出来,所以SAX适合于大规模的解析。这一点,JSON目前是做不到得。
所以,JSON和XML的轻/重量级的区别在于
JSON只提供整体解析方案,而这种方法只在解析较少的数据时才能起到良好的效果;
XML提供了对大规模数据的逐步解析方案,这种方案很适合于对大量数据的处理。

(2).关于数据格式编码及解析难度
<1>.在编码方面。
虽然XML和JSON都有各自的编码工具,但是JSON的编码要比XML简单,即使不借助工具,也可以写出JSON代码,但要写出好的XML代码就有点困难;与XML一样,JSON也是基于文本的,且它们都使用Unicode编码,且其与数据交换格式XML一样具有可读性。
主观上来看,JSON更为清晰且冗余更少些。JSON网站提供了对JSON语法的严格描述,只是描述较简短。从总体来看,XML比较适合于标记文档,而JSON却更适于进行数据交换处理。
<2>.在解析方面。
在普通的web应用领域,开发者经常为XML的解析伤脑筋,无论是服务器端生成或处理XML,还是客户端用 JavaScript 解析XML,都常常导致复杂的代码,极低的开发效率。
实际上,对于大多数Web应用来说,他们根本不需要复杂的XML来传输数据,XML宣称的扩展性在此就很少具有优势,许多Ajax应用甚至直接返回HTML片段来构建动态Web页面。和返回XML并解析它相比,返回HTML片段大大降低了系统的复杂性,但同时缺少了一定的灵活性。同XML或 HTML片段相比,数据交换格式JSON 提供了更好的简单性和灵活性。在Web Serivice应用中,至少就目前来说XML仍有不可动摇的地位。

(3).实例比较
XML和JSON都使用结构化方法来标记数据,下面来做一个简单的比较。
<1>.用XML表示中国部分省市数据如下:

复制代码
<?xml version="1.0" encoding="utf-8" ?>
<country><name>中国</name><province><name>黑龙江</name><citys><city>哈尔滨</city><city>大庆</city></citys>    </province><province><name>广东</name><citys><city>广州</city><city>深圳</city><city>珠海</city></citys>   </province><province><name>台湾</name><citys><city>台北</city><city>高雄</city></citys> </province><province><name>新疆</name><citys><city>乌鲁木齐</city></citys></province>
</country>
复制代码

<2>.用JSON表示中国部分省市数据如下:

复制代码
 var country ={name: "中国",provinces: [{ name: "黑龙江", citys: { city: ["哈尔滨", "大庆"]} },{ name: "广东", citys: { city: ["广州", "深圳", "珠海"]} },{ name: "台湾", citys: { city: ["台北", "高雄"]} },{ name: "新疆", citys: { city: ["乌鲁木齐"]} }]}
复制代码

编码的可读性来说,XML有明显的优势,毕竟人类的语言更贴近这样的说明结构。JSON读起来更像一个数据块,读起来就比较费解了。不过,我们读起来费解的语言,恰恰是适合机器阅读,所以通过JSON的索引country.provinces[0].name就能够读取“黑龙江”这个值。
编码的手写难度来说,XML还是舒服一些,好读当然就好写。不过写出来的字符JSON就明显少很多。去掉空白制表以及换行的话,JSON就是密密麻麻的有用数据,而XML却包含很多重复的标记字符。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/451917.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ajax传递数组:属性traditional设置

jQuery.ajaxSettings.traditional true; $.post("",function(){});转载于:https://www.cnblogs.com/HansZimmer/p/9334006.html

Python面试题总结(9)--高级特性

文章目录1. 函数装饰器有什么作用&#xff1f;请列举说明&#xff1f;2. Python 垃圾回收机制&#xff1f;3. 魔法函数 _call_怎么使用?4. 如何判断一个对象是函数还是方法&#xff1f;5. classmethod 和 staticmethod 用法和区别6. Python 中的接口如何实现&#xff1f;7. Py…

I/O流讲解

本文来自&#xff1a;曹胜欢博客专栏&#xff1a;http://blog.csdn.net/csh624366188 在软件开发中&#xff0c;数据流和数据库操作占据了一个很重要的位置&#xff0c;所以&#xff0c;熟悉操作数据流和数据库&#xff0c;对于每一个开发者来说都是很重要的&#xff0c;今天就…

Spring Boot入门(9)网页版计算器

介绍 在写了前八篇Spring Boot项目的介绍文章后&#xff0c;我们已经初步熟悉了利用Spring Boot来做Web应用和数据库的使用方法了&#xff0c;但是这些仅仅是官方介绍的一个例子而已。   本次分享将介绍笔者自己的一个项目&#xff1a;网页版计算器&#xff0c;以这两篇博客…

shell编程基础(七): 处理文件命令sed与awk

一、sed&#xff08;以行为单位处理文件&#xff09; sed意为流编辑器&#xff08;Stream Editor&#xff09;&#xff0c;在Shell脚本和Makefile中作为过滤器使用非常普遍&#xff0c;也就是把前一个程序的输出引入sed的输入&#xff0c;经过一系列编辑命令转换为另一种格式输…

数据结构与算法--6.二分查找

文章目录一. 二分查找二. 代码实现一&#xff1a;使用递归三. 代码实现二&#xff1a;非递归一. 二分查找 二. 代码实现一&#xff1a;使用递归 def binary_search(alist, item):"""二分查找&#xff1a;使用递归"""n len(alist)if n > 0:m…

SpringMVC请求处理流程、springMVC工作流程

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 页面请求到来 --> 前端控制器&#xff08;DispatcherServlet&#xff09;收到请求&#xff0c;请求 处理映射器&#xff08;Hanle…

Android的TextView在显示文字的时候,如果有段中文有英文,有中文,有中文标点符号,你会发现,当要换行的时候遇到中文标点, 这一行就会空出很多空格出来...

一、问题描述&#xff1a; Android的TextView在显示文字的时候&#xff0c;如果有段中文有英文&#xff0c;有中文&#xff0c;有中文标点符号&#xff0c;你会发现&#xff0c;当要换行的时候遇到中文标点&#xff0c; 这一行就会空出很多空格出来。原因是&#xff1a; 1&…

什么是IDE

集成开发环境&#xff08;IDE&#xff0c;Integrated Development Environment &#xff09;是用于提供程序开发环境的应用程序&#xff0c;一般包括代码编辑器、编译器、调试器和图形用户界面等工具。集成了代码编写功能、分析功能、编译功能、调试功能等一体化的开发软件服务…

vue 学习

http://jspang.com/ vue 学习 vue 学习 转载于:https://www.cnblogs.com/qianjin888/p/9342031.html

策略模式-Strategy Pattern

解决问题 将算法按照策略或场景封装起来&#xff0c;以方便按照不同的场景执行不同的策略。它很好的解决了通过if...else 来决策行为而带来的代码和逻辑复杂性。 应用场景 一个经常被拿来举例的场景是收银员收银场景&#xff1a;它需要根据不同的场景&#xff08;是否为会员、有…

ssm框架下 tiles框架 的使用

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 tiles框架的工作 在springMVC工作流程中属于视图解析器 解析视图这一步。算是视图解析器的一个插件&#xff0c;作了视图解析这步的一部…

数据结构与算法--7.树的基础知识

文章目录一. 树的概念二. 树的术语三. 树的种类四. 树的存储和表示五. 常见的树的应用场景一. 树的概念 二. 树的术语 三. 树的种类 四. 树的存储和表示 五. 常见的树的应用场景

运用java 多线程模拟火车售票。。。。

public class Demo01 { public static void main(String[] args) { // TODO Auto-generated method stub //多线程并行时&#xff0c;会出现的问题 //同步&#xff1a; //买火车票&#xff0c;四个窗口A,B,C,D //创建任务 TicketTask task new TicketTask(); //四个窗口A,B,C,…

JQuery validate 各项验证规则讲解

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 使用样例见&#xff1a;http://blog.csdn.net/jiangyu1013/article/details/56014730 //定义中文消息 var cnmsg { required: “必选字…

数据结构与算法--8.二叉树的基础知识

文章目录一. 二叉树基本概念二. 二叉树的性质三. 二叉树的代码实现四. 二叉树的先序、中序、后序遍历一. 二叉树基本概念 二. 二叉树的性质 三. 二叉树的代码实现 class Node(object):"""二叉树节点"""def __init__(self,item):self.elem item…

ZooKeeper(二)ZooKeeper能做什么?

上一节介绍了ZooKeeper的一些基础知识&#xff0c;这一节主要讲ZooKeeper有哪些用途。命名服务&#xff08;Name Service&#xff09; 主要是作为分布式命名服务&#xff0c;通过调用zk的create node api&#xff0c;能够很容易创建一个全局唯一的path&#xff0c;这个path就可…