XML与JSON报文解析

上传人:美*** 文档编号:242980323 上传时间:2024-09-13 格式:PPT 页数:30 大小:739.21KB
返回 下载 相关 举报
XML与JSON报文解析_第1页
第1页 / 共30页
XML与JSON报文解析_第2页
第2页 / 共30页
XML与JSON报文解析_第3页
第3页 / 共30页
点击查看更多>>
资源描述
,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,内部资料 注意保密,XML,与,JSON,目录,XML,简介,XML,、,JSON,对比,XML,解析,JSON,简介,JSON,解析,XML,、,JSON,转换,XML,定义,扩展标记语言 (Extensible Markup Language, XML) ,用于标记电子文件使其具有结构性的标记语言,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。 XML使用DTD(document type definition)文档类型定义来组织数据;格式统一,跨平台和语言,早已成为业界公认的标准。,XML是标准通用标记语言 (SGML) 的子集,非常适合 Web 传输。XML 提供统一的方法来描述和交换独立于应用程序或供应商的结构化数据。,XML,简介,2024/9/13,XML,格式,开始标签必须有一个结束标签,空元素标签必须被关闭,所有的标签都区分大小写,并且前后一致,所有的标签必须成对的出现,合理嵌套,所有的标签属性值必须用双引号或者单引号括起来,Xml只能有一个根元素,XML,简介,2024/9/13,XML,文档组成示例,XML,简介,*,XML,解析,A1,GZ,A2,XG,示例代码,DOM,解析,2024/9/13,DOM是用与平台和语言无关的方式表示XML文档的官方W3C标准。DOM是以层次结构组织的节点或信息片断的集合。这个层次结构允许开发人员在树中寻找特定信息。分析该结构通常需要加载整个文档和构造层次结构,然后才能做任何工作。由于它是基于信息层次的,因而DOM被认为是基于树或基于对象的。DOM以及广义的基于树的处理具有几个优点。首先,由于树在内存中是持久的,因此可以修改它以便应用程序能对数据和结构作出更改。它还可以在任何时候在树中上下导航,而不是像SAX那样是一次性的处理。DOM使用起来也要简单得多。,XML,解析,2024/9/13,public class MyXMLReader,public static void main(String arge),try,File f=new File(data_10k.xml);,DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();,DocumentBuilder builder=factory.newDocumentBuilder();,Document doc = builder.parse(f);,NodeList nl = doc.getElementsByTagName(VALUE);,for (int i=0;inl.getLength();i+),System.out.print(车牌号码: + doc.getElementsByTagName(NO).item(i).getFirstChild().getNodeValue();,System.out.println(车主地址: + doc.getElementsByTagName(ADDR).item(i).getFirstChild().getNodeValue();,catch(Exception e),e.printStackTrace();,XML,解析,SAX,2024/9/13,SAX解析器采用了基于事件的模型,它在解析XML文档的时候可以触发一系列的事件,当发现给定的tag的时候,它可以激活一个回调方法,告诉该方法制定的标签已经找到。SAX对内存的要求通常会比较低,因为它让开发人员自己来决定所要处理的tag.特别是当开发人员只需要处理文档中所包含的部分数据时,SAX这种扩展能力得到了更好的体现。但用SAX解析器的时候编码工作会比较困难,而且很难同时访问同一个文档中的多处不同数据。,XML,解析,2024/9/13,public class MyXMLReader extends DefaultHandler ,java.util.Stack tags = new java.util.Stack();,public MyXMLReader() ,super();,public static void main(String args) ,try ,SAXParserFactory sf = SAXParserFactory.newInstance();,SAXParser sp = sf.newSAXParser();,MyXMLReader reader = new MyXMLReader();,sp.parse(new InputSource(data_10k.xml), reader);, catch (Exception e) ,e.printStackTrace();,public void characters(char ch, int start, int length) throws SAXException ,String tag = (String) tags.peek();,if (tag.equals(NO) ,System.out.print(车牌号码: + new String(ch, start, length);,if (tag.equals(ADDR) ,System.out.println(地址: + new String(ch, start, length);,public void startElement(String uri,String localName,String qName,Attributes attrs) ,tags.push(qName);,XML,解析,JDOM,2024/9/13,JDOM的目的是成为Java特定文档模型,它简化与XML的交互并且比使用DOM实现更快。由于是第一个Java特定模型,JDOM一直得到大力推广和促进。正在考虑通过“Java规范请求JSR-102”将它最终用作“Java标准扩展”。从2000年初就已经开始了JDOM开发。,JDOM自身不包含解析器。它通常使用SAX2解析器来解析和验证输入XML文档(尽管它还可以将以前构造的DOM表示作为输入)。它包含一些转换器以将JDOM表示输出成SAX2事件流、DOM模型或XML文本文档。JDOM是在Apache许可证变体下发布的开放源码。,XML,解析,2024/9/13,public class MyXMLReader ,public static void main(String arge) ,try ,SAXBuilder builder = new SAXBuilder();,Document doc = builder.build(new File(data.xml);,Element foo = doc.getRootElement();,List allChildren = foo.getChildren();,for(int i=0;iallChildren.size();i+) ,System.out.print(车牌号码: + (Element)allChildren.get(i).getChild(NO).getText();,System.out.println(车主地址: + (Element)allChildren.get(i).getChild(ADDR).getText();, catch (Exception e) ,e.printStackTrace();,XML,解析,DOM4J,2024/9/13,虽然DOM4J代表了完全独立的开发结果,但最初,它是JDOM的一种智能分支。它合并了许多超出基本XML文档表示的功能,包括集成的XPath支持、XML Schema支持以及用于大文档或流化文档的基于事件的处理。它还提供了构建文档表示的选项,它通过DOM4J API和标准DOM接口具有并行访问功能。从2000下半年开始,它就一直处于开发之中。,DOM4J是一个非常非常优秀的Java XML API,具有性能优异、功能强大和极端易用使用的特点,同时它也是一个开放源代码的软件。如今你可以看到越来越多的Java软件都在使用DOM4J来读写XML,特别值得一提的是连Sun的JAXM也在用DOM4J.,XML,解析,2024/9/13,public class MyXMLReader ,public static void main(String arge) ,try ,File f = new File(data_10k.xml);,SAXReader reader = new SAXReader();,Document doc = reader.read(f);,Element root = doc.getRootElement();,Element foo;,for (Iterator i = root.elementIterator(VALUE); i.hasNext();) ,foo = (Element) i.next();,System.out.print(车牌号码: + foo.elementText(NO);,System.out.println(车主地址: + foo.elementText(ADDR);, catch (Exception e) ,e.printStackTrace();,XML,解析,2024/9/13,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 的一个子集。,JSON,简介,2024/9/13,JSON,格式,1,对象是属性、值对的集合。一个对象的开始于“”,结束于“”。每一个属性名和值间用“:”提示,属性间用“,”分隔。,2,数组是有顺序的值的集合。一个数组开始于“”,结束于“”,值之间用“,”分隔。,3,值可以是引号里的字符串、数字、true、false、null,也可以是对象或数组。这些结构都能嵌套。,JSON,简介,2024/9/13,JSON,示例,ChineseName:江苏,EnglishName:JiangSu,check_version:1.2,ChineseName:南京,EnglishName:NanJing,check_version:1.0,JSON,简介,2024/9/13,JSON,解析,JSON,解析常用的方法一般有三种:,原始的,json-lib,Google的Gson,阿里的Fastjson,json-lib,json-lib:json-lib最开始的也是应用最广泛的json解析工具,json-lib 不好的地方确实是依赖于很多第三方包,在Json.org网站上,Java可以使用的解析Json的组件就有21种之多。,2024/9/13,import net.sf.json.JSONArray;,import net.sf.json.JSONObject;,public class json_test ,public static void main(String args) ,/ TODO Auto-generated method stub,String jsonStr = new ReadFile().readfile(src/test.xml);,JSONArray jsonArray = JSONArray.fromObject(jsonStr);,int size = jsonArray.size();,System.out.println(Size: + size);,for (int i = 0; i size; i+) ,JSONObject jsonObject = jsonArray.getJSONObject(i);,System.out.println( + i + ChineseName=,+ jsonObject.get(ChineseName);,System.out.println( + i + EnglishName=,+ jsonObject.get(EnglishName);,System.out.println( + i + check_version=,+ jsonObject.get(check_version);,JSON,解析,2024/9/13,Fastjson,阿里的Fastjson:Fastjson是一个Java语言编写的高性能的JSON处理器,由阿里巴巴公司开发。无依赖,不需要例外额外的jar,能够直接跑在JDK上。,FastJson在复杂类型的Bean转换Json上会出现一些问题,可能会出现引用的类型,导致Json转换出错,需要制定引用。,FastJson采用独创的算法,将parse的速度提升到极致,超过所有json库。,2024/9/13,package json.resolve;,import com.alibaba.fastjson.JSONArray;,public class json_fastjson ,public static void main(String args) ,String jsonStr = new ReadFile().readfile(src/test.xml);,JSONArray jsonArray = JSONArray.parseArray(jsonStr);,for (int i = 0; i jsonArray.size(); i+) ,com.alibaba.fastjson.JSONObject jsonObject = jsonArray,.getJSONObject(i);,System.out.println( + i + ChineseName=,+ jsonObject.get(ChineseName);,System.out.println( + i + EnglishName=,+ jsonObject.get(EnglishName);,System.out.println( + i + check_version=,+ jsonObject.get(check_version);,JSON,解析,2024/9/13,所需,jar,包,import java.util.Iterator;,import net.sf.json.JSONObject;,import com.google.gson.Gson;,import com.google.gson.JsonArray;,import com.google.gson.JsonElement;,import com.google.gson.JsonObject;,import com.google.gson.JsonParser;,Gson,Gson:Gson是谷歌公司研发的。应用主要为toJson与fromJson两个转换函数,无依赖,不需要例外额外的jar,能够直接跑在JDK上。,而在使用这种对象转换之前需先创建好对象的类型以及其成员才能成功的将JSON字符串成功转换成相对应的对象。类里面只要有get和set方法,Gson完全可以将复杂类型的json到bean或bean到json的转换,是JSON解析的神器。Gson在功能上面无可挑剔,但是性能上面比FastJson有所差距。,2024/9/13,JSON,解析,2024/9/13,1)常规转换,XML是节点名与值,JSON也是KEY与VALUE的键值对。这样的转换是最简单的。,XML:,张三,转为JSON:, Student: 张三 ,2) XML节点含有属性,XML:,张三,转为JSON,Student: ,ID: 1001,#text: 张三,XML,、,JSON,转换,2024/9/13,1,无属性节点,简单的字符串数组,XML,:,name,age,JSON:,line: ,item: ,name,age,2,有属性的转为对象,无属性的则直接转为字符串,XML,:,name,age,JSON:,line: ,item: ,font-size: 20,#text: name,age,XML,、,JSON,转换,3)有属性的节点生成对象,2024/9/13,4) XML的节点顺序性,XML存在着节点之间的顺序,但当转为JSON后,有时顺序会被打乱。,XML,、,JSON,转换,JSON:,template: ,block: ,天空,地下,line: 地平线,XML:,天空,地平线,地下,2024/9/13,.XML的优点,A.格式统一,符合标准;,B.容易与其他系统进行远程交互,数据共享比较方便。,.XML的缺点,A.XML文件庞大,文件格式复杂,传输占带宽;,B.服务器端和客户端都需要花费大量代码来解析XML,导致服务器端和客户端代码变得异常复杂且不易维护;,C.客户端不同浏览器之间解析XML的方式不一致,需要重复编写很多代码;,D.服务器端和客户端解析XML花费较多的资源和时间。,XML,优缺点,XML,、,JSON,对比,2024/9/13,JSON,优缺点,.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格式能直接为服务器端代码使用,大大简化了服务器端和客户端的代码开发量,且完成任务不变,并且易于维护。,.JSON的缺点,A.没有XML格式这么推广的深入人心和喜用广泛,没有XML那么通用性;,B.JSON格式目前在Web Service中推广还属于初级阶段。,XML,、,JSON,对比,2024/9/13,XML,、,JSON,对比,在可读性方面,JSON和XML的数据可读性基本相同。JSON和XML的可读性可谓不相上下,一边是建议的语法,一边是规范的标签形式,很难分出胜负。,在可扩展性方面,XML天生有很好的扩展性,JSON当然也有,没有什么是XML能扩展,JSON不能的。,在编码难度方面,XML有丰富的编码工具,比如Dom4j、JDom等,JSON也有json.org提供的工具,但是JSON的编码明显比XML容易许多,即使不借助工具也能写出JSON的代码,可是要写好XML就不太容易了。,在解码难度方面,XML的解析得考虑子节点父节点,让人头昏眼花,而JSON的解析难度几乎为0。这一点XML输的真是没话说。,在流行度方面,XML已经被业界广泛的使用,而JSON才刚刚开始,但是在Ajax这个特定的领域,未来的发展一定是XML让位于JSON。到时Ajax应该变成Ajaj(Asynchronous Javascript and JSON)了。,JSON和XML同样拥有丰富的解析手段。,JSON相对于XML来讲,数据的体积小。,JSON与JavaScript的交互更加方便。,JSON对数据的描述性比XML较差。,JSON的速度要远远快于XML。,谢谢,!,同一个团队 ,同一个梦想!,One,Team,One,Dream,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 小学资料


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!