Json的优缺点

JSON的定义
    一种轻量级的数据交换格式,具有良好的可读和便于快速编写的特性。业内主流技术为其提供了完整的解决方案(有点类似于正则表达式 ,获得了当今大部分语言的支持),从而可以在不同平台间进行数据交换。JSON采用兼容性很高的文本格式,同时也具备类似于C语言体系的行为。
 
XML的定义
    扩展标记语言 (Extensible Markup Language, XML) ,用于标记电子文件使其具有结构性的标记语言,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。 XML是标准通用标记语言 (SGML) 的子集,非常适合 Web 传输。XML 提供统一的方法来描述和交换独立于应用程序或供应商的结构化数据。
[  XML ]
使 用XML作为传输格式的优势:
1. 格式统一, 符合标准
2. 容易与其他系统进行远程交互, 数据共享比较方便


XML的十字路口: 浏览器和 Ajax 
  XML设计原理已经发布了将近十年。时至今日,这种标记语言已经在广阔的软件应用领域中占据了主导地位。从Java、.NET等主流平台中的配置和部署描述符到应用集成场景中更复杂的应用,XML与生俱来的语言无关性使之在软件架构师心目中占据着独特的地位。但即便最著名的XML权威也不得不承认:在某些环境中,XML的使用已经超出了它自身能力的极限。 

  围绕Ajax原理构建的那些Web应用程序最能说明XML的生存能力,从这一点来看,一种新的有效负载格式的发展壮大也得益于XML。这种新的有效负载格式就是JavaScript Object Notation (JSON)。在探索这种新的标记语言的复杂性之前,首先来分析一下在这种独特的设计形式中,XML具有哪些局限性。 

  Ajax建立了一个用于从远程Web services发送和接收数据的独立信道,从而允许Web程序执行信道外(out-of-band)客户端/服务器调用。通俗地说,Ajax程序中的更新和导航序列在典型的客户端/服务器环境之外完成,在后台(即信道外)接受到信息后,必须进行一次完整的屏幕刷新。更多背景信息,请参阅David Teare的 Ajax简介(Dev2Dev)。 

  这些应用程序更新通常是通过REST风格(RESTful)Web services获得的,一旦被用户的浏览器接收到,就需要整合到HTML页面的总体布局之中,这正是XML发挥强大力量的场合。尽管近年来,脚本语言支持和插件支持已使大多数主流浏览器的功能得到了强化,但许多编程任务依然难于开展,其中之一就是操纵或处理文本,这通常是使用DOM实现的。 

  采用DOM的复杂性源于其基于函数的根,这使得对数据树的简单修改或访问都需要进行无数次方法调用。此外,众所周知,DOM在各种浏览器中的实现细节不尽相同,这一过程将带来极为复杂的编程模式,其跨浏览器兼容性出现问题的可能性极大。接下来的问题显而易见,那就是:如何使一种标记语言轻松集成到HTML页面中以满足Ajax的要求? 

  问题的答案就是:利用所有主流浏览器中的一种通用组件——JavaScript引擎。XML需要使用DOM之类的机制来访问数据并将数据整合到布局之中,采用这种方法,我们不再使用像XML这样的格式来交付Ajax更新,而是采用一种更为简单直观的方式,采用JavaScript引擎自然匹配的格式——也就是JSON。 

  既然已经明确了JSON与XML和Ajax之间的关系,下面将进一步探讨JSON背后的技术细节。 

JSON剖析:优点和不足 
  对于JSON,首先要明白JSON和XML一样也是一种简单文本格式。相对于XML,它更加易读、更便于肉眼检查。在语法的层面上,JSON与其他格式的区别是在于分隔数据的字符,JSON中的分隔符限于单引号、小括号、中括号、大括号、冒号和逗号。下图是一个JSON有效负载:

Java代码 复制代码
  1. {"addressbook": {"name""Mary Lebow",   
  2.     "address": {   
  3.         "street""5 Main Street"  
  4.         "city""San Diego, CA",   
  5.         "zip"91912,   
  6.     },   
  7.     "phoneNumbers": [   
  8.         "619 332-3452",   
  9.         "664 223-4667"  
  10.     ]   
  11.  }   
  12. }  
[java] view plaincopy
  1. {"addressbook": {"name""Mary Lebow",  
  2.     "address": {  
  3.         "street""5 Main Street"  
  4.         "city""San Diego, CA",  
  5.         "zip"91912,  
  6.     },  
  7.     "phoneNumbers": [  
  8.         "619 332-3452",  
  9.         "664 223-4667"  
  10.     ]  
  11.  }  
  12. }  

  将上面的JSON有效负载用XML改写,如下: 

Xml代码 复制代码
  1. <addressbook>  
  2.  <name>Mary Lebow</name>  
  3.  <address>    
  4.     <street>5 Main Street</street>  
  5.     <city zip="91912"> San Diego, CA </city>  
  6.     <phoneNumbers>  
  7.       <phone>619 332-3452</phone>  
  8.       <phone>664 223-4667</phone>  
  9.     </phoneNumbers>  
  10.  </address>  
  11. </addressbook>  
[xml] view plaincopy
  1. <addressbook>  
  2.  <name>Mary Lebow</name>  
  3.  <address>   
  4.     <street>5 Main Street</street>  
  5.     <city zip="91912"> San Diego, CA </city>  
  6.     <phoneNumbers>  
  7.       <phone>619 332-3452</phone>  
  8.       <phone>664 223-4667</phone>  
  9.     </phoneNumbers>  
  10.  </address>  
  11. </addressbook>  

  是不是很相似?但它们并不相同。下面将详细阐述采用JSON句法的优点和不足。 

优点:
1. 数据格式比较简单, 易于读写, 格式都是压缩的, 占用带宽小
2. 易于解析这种语言, 客户端JavaScript可以简单的通过eval_r()进行JSON数据的读取
3. 支持多种语言, 包括ActionScript, C, C#, ColdFusion, Java, JavaScript, Perl, PHP, Python, Ruby等语言服务器端语言, 便于服务器端的解析
4. 在PHP世界, 已经有PHP-JSON和JSON-PHP出现了, 便于PHP序列化后的程序直接调用. PHP服务器端的对象、数组等能够直接生JSON格式, 便于客户端的访问提取.
5. 因为JSON格式能够直接为服务器端代码使用, 大大简化了服务器端和客户端的代码开发量, 但是完成的任务不变, 且易于维护

缺点:
1. 没有XML格式这么推广的深入人心和使用广泛, 没有XML那么通用性
2. JSON格式目前在Web Service中推广还属于初级阶段
JSON 和 XML 优缺点的比较
1.       在可读性方面,JSON和XML的数据可读性基本相同。JSON和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。

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

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

相关文章

软件工程师 VS 硬件工程师

因为在软件行业35岁就算老人了而搞硬件的53岁正辉煌表面上看起来高大上的硬件工程师在实际的工作中&#xff0c;其实很惨...以上漫画虽然调侃的意味更多但现实中搞硬件的门槛确实很高收入也会随着经验的增多不断增长硬件工程师也基本不存在中年危机如果实在搞不下去了转项目经理…

假如我们的坦克继续前进队——需求改进系统设计

需求和原型改进 在上个星期的《需求说明书》课堂讨论中&#xff0c;老师提出了游戏的用户界面的设计问题。 经过小组成员的讨论后&#xff0c;我们的想法如下&#xff1a;设计关卡基于时间和人手问题难以实现因此改为一关的形式&#xff0c;以便有更多的时间出开发趣味性更高的…

DIY一个低成本多功能点阵时钟!

大家好&#xff0c;转发一篇正念同学的文章----大家好&#xff0c;我是ZhengN。本次转载一篇保姆级的diy教程&#xff1a;基于Esp8266的多功能点阵时钟 。简介很早就了解ESP8266了&#xff0c;当时也用这个搞过一些小demo&#xff0c;一直也没有想过要弄些实际的作品出来&#…

从DataTable导出Excel,并下载,删除Excel进程。

页面上加入一个button即可.源代码如下: usingSystem;usingSystem.Collections;usingSystem.ComponentModel;usingSystem.Data;usingSystem.Drawing;usingSystem.Web;usingSystem.Web.SessionState;usingSystem.Web.UI;usingSystem.Web.UI.WebControls;usingSystem.Web.UI.HtmlC…

Traceroute(路由追踪)的原理及实现

现实世界中的网络是由无数的计算机和路由器组成的一张的大网&#xff0c;应用的数据包在发送到服务器之前都要经过层层的路由转发。而Traceroute是一种常规的网络分析工具&#xff0c;用来定位到目标主机之间的所有路由器 原理 在介绍Traceroute的原理之前&#xff0c;需要了解…

我们应该搞清楚分支预测

分支预测的英文名字是「Branch Prediction」大家可以在Google上搜索这个关键字&#xff0c;可以看到关于分支预测的很多内容&#xff0c;不过要搞清楚分支预测如何工作的&#xff0c;才是问题的关键。分支预测对程序的影响我们来看看下面的两段代码代码1#include <algorithm…

Intent介绍及Intent在Activity中的使用方法

1.Intent的实现过程   在Android中&#xff0c;Intent不仅可用于应用程序之间的交互&#xff0c;也可用于应用程序内部的Activity/Service之间的交互。   Intent负责对应用中一次操作进行描述&#xff0c;描述内容包括动作以及动作所涉及的数据&#xff0c;Android中的In…

程序结束后去哪儿了?

大家好&#xff0c;我是写代码的篮球球痴&#xff0c;转发一篇卓老师的文章&#xff0c;文章中的内容我之前做单片机的时候也有遇到过。推荐给大家看看~简 介&#xff1a; 对于嵌入式系统&#xff0c;如果没有运行RTOS&#xff0c;那么程序开发中的 主函数&#xff08;main()&a…

CodeSmith终极玩法

CodeSmith是一个模仿asp.net运行机制的代码生成器, 运行时分析模板(相当aspx文件)的预编译指令和主体内容, 生成一个继承自CodeSmith.Engine.CodeTemplate(相当于System.Web.UI.Page)或者一个在Inherites预编译指令指定的类(相当于CodeBehind类)的源码, 且把它编译. 然后把这个…

bom与dom

区别 BOM&#xff08;Browser Object Model&#xff09; BOM 即浏览器对象模型&#xff0c;BOM没有相关标准&#xff0c;BOM的最核心对象是window对象。window对象既为javascript访问浏览器提供API&#xff0c;同时在ECMAScript中充当Global对象。BOM和浏览器关系密切&#xff…

有些事不用听别人的

今天在群里跟几个朋友聊天&#xff0c;然后说了自己的想法&#xff0c;最近很多人在说公众号不会有好的发展&#xff0c;写文章也是没有出路的。不过这个是事实。短视频才是可能是出路&#xff0c;短视频是个很大的蛋糕&#xff0c;从表达方式上来说&#xff0c;视频的表达方式…

25个优秀的设计机构网站设计案例

今天&#xff0c;我们一起来欣赏网站设计工作室自己的网站。设计公司的网站除了要能够吸引客户以外&#xff0c;还要通过他们自己的网站向客户展示他们的设计理念和风格。这里收集的25个优秀的设计机构网站既有清爽简洁风格的&#xff0c;也有色彩丰富&#xff0c;图文并茂的&a…

一个适用各类场合的Makefile模板

1.写在前面对于Windows下开发&#xff0c;很多IDE都集成了编译器&#xff0c;如Visual Studio&#xff0c;提供了“一键编译”&#xff0c;编码完成后只需一个操作即可完成编译、链接、生成目标文件。Linux开发与Windows不同&#xff0c;Linux下一般用的的gcc/g编译器&#xff…

毕业十年|我的嵌入式AI学习路线(笔记、代码)

嵌入式从业者接下来会有怎样的黄金十年&#xff1f;在物联网和人工智能的促进下&#xff0c;嵌入式在未来的5-10年内会迎来更多的发展机会&#xff0c;一方面嵌入式开发会迎来更多的应用场景&#xff0c;另一方面嵌入式开发的技术体系也会逐渐丰富&#xff0c;从而拓展物联网开…

在艰苦年代,买不起万用表,怎么测量电路电压?

如何测量电压&#xff1f;有这样一张图片&#xff1a;用舌头来测量&#xff1f;开玩笑的吧&#xff01;不过这张照片勾起了我的回忆&#xff1a;有一位玩电子的老前辈&#xff0c;现在已经70多岁了。和他聊天&#xff0c;他说&#xff0c;当年他们玩电子&#xff0c;条件非常艰…

VBA学习_5:流程控制

1、If If Range("B2").Value >60 Then Range("C2").Value "及格" Else Range("C2").Value"不及格"如果。。。那么。。。。否则。。。。 If Range("B2").Value > 60 ThenRange("C2").Value "…

嵌入式的薪资还是挺低的

我最近和一个比较好的朋友聊天&#xff0c;我这个朋友在一家比较传统的公司&#xff0c;在这个公司做嵌入式软件开发&#xff0c;偏系统方向的。然后最近拿到了几个不错的offer&#xff0c;让我帮忙看看。这几个offer我就不发出来给大家看了。可以肯定的是&#xff0c;这几个of…

新手必看!单片机掉电检测与数据掉电保存方案

单片机在正常工作时&#xff0c;因某种原因造成突然掉电&#xff0c;将会丢失数据存储器&#xff08;RAM&#xff09;里的数据。在某些应用场合如测量、控制等领域&#xff0c;单片机正常工作中采集和运算出一些重要数据&#xff0c;待下次上电后需要恢复这些重要数据。因此&am…

Study Notes ASP.Net 之Theme Skin

基本概念&#xff1a; Theme 和 Skin用以定义页面中各个控件的显示样式&#xff0c;如字体大小&#xff0c;前/后景色等等。一个Theme可以包括多个Skin&#xff0c;一个Skin可以定义多个控件的样式。目的&#xff1a; 使得页面样式的制作可以与页面制作分工进行。<?xml:nam…

推荐一个值得加入C++开发者俱乐部

之前我有篇文章提起过&#xff0c;开始进入某厂是从0开始做项目的&#xff0c;当时看到那套SDK软件&#xff0c;而且97%都是用C写的&#xff0c;我的头都大了。后面也是坚持不断的学习&#xff0c;积累&#xff0c;修改&#xff0c;向身边同事请教&#xff0c;加入优秀社群学习…