XML与JSON报文解析.ppt_第1页
XML与JSON报文解析.ppt_第2页
XML与JSON报文解析.ppt_第3页
XML与JSON报文解析.ppt_第4页
XML与JSON报文解析.ppt_第5页
免费预览已结束,剩余25页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

内部资料注意保密,XML与JSON,目录,XML简介,XML、JSON对比,XML解析,JSON简介,JSON解析,XML、JSON转换,XML定义,扩展标记语言(ExtensibleMarkupLanguage,XML),用于标记电子文件使其具有结构性的标记语言,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。XML使用DTD(documenttypedefinition)文档类型定义来组织数据;格式统一,跨平台和语言,早已成为业界公认的标准。XML是标准通用标记语言(SGML)的子集,非常适合Web传输。XML提供统一的方法来描述和交换独立于应用程序或供应商的结构化数据。,XML简介,2020/6/10,XML格式,开始标签必须有一个结束标签空元素标签必须被关闭所有的标签都区分大小写,并且前后一致所有的标签必须成对的出现,合理嵌套所有的标签属性值必须用双引号或者单引号括起来Xml只能有一个根元素,XML简介,2020/6/10,XML文档组成示例,XML简介,*,XML解析,A1GZA2XG,示例代码,DOM解析,2020/6/10,DOM是用与平台和语言无关的方式表示XML文档的官方W3C标准。DOM是以层次结构组织的节点或信息片断的集合。这个层次结构允许开发人员在树中寻找特定信息。分析该结构通常需要加载整个文档和构造层次结构,然后才能做任何工作。由于它是基于信息层次的,因而DOM被认为是基于树或基于对象的。DOM以及广义的基于树的处理具有几个优点。首先,由于树在内存中是持久的,因此可以修改它以便应用程序能对数据和结构作出更改。它还可以在任何时候在树中上下导航,而不是像SAX那样是一次性的处理。DOM使用起来也要简单得多。,XML解析,2020/6/10,publicclassMyXMLReaderpublicstaticvoidmain(Stringarge)tryFilef=newFile(data_10k.xml);DocumentBuilderFactoryfactory=DocumentBuilderFactory.newInstance();DocumentBuilderbuilder=factory.newDocumentBuilder();Documentdoc=builder.parse(f);NodeListnl=doc.getElementsByTagName(VALUE);for(inti=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(Exceptione)e.printStackTrace();,XML解析,SAX,2020/6/10,SAX解析器采用了基于事件的模型,它在解析XML文档的时候可以触发一系列的事件,当发现给定的tag的时候,它可以激活一个回调方法,告诉该方法制定的标签已经找到。SAX对内存的要求通常会比较低,因为它让开发人员自己来决定所要处理的tag.特别是当开发人员只需要处理文档中所包含的部分数据时,SAX这种扩展能力得到了更好的体现。但用SAX解析器的时候编码工作会比较困难,而且很难同时访问同一个文档中的多处不同数据。,XML解析,2020/6/10,publicclassMyXMLReaderextendsDefaultHandlerjava.util.Stacktags=newjava.util.Stack();publicMyXMLReader()super();publicstaticvoidmain(Stringargs)trySAXParserFactorysf=SAXParserFactory.newInstance();SAXParsersp=sf.newSAXParser();MyXMLReaderreader=newMyXMLReader();sp.parse(newInputSource(data_10k.xml),reader);catch(Exceptione)e.printStackTrace();publicvoidcharacters(charch,intstart,intlength)throwsSAXExceptionStringtag=(String)tags.peek();if(tag.equals(NO)System.out.print(车牌号码:+newString(ch,start,length);if(tag.equals(ADDR)System.out.println(地址:+newString(ch,start,length);publicvoidstartElement(Stringuri,StringlocalName,StringqName,Attributesattrs)tags.push(qName);,XML解析,JDOM,2020/6/10,JDOM的目的是成为Java特定文档模型,它简化与XML的交互并且比使用DOM实现更快。由于是第一个Java特定模型,JDOM一直得到大力推广和促进。正在考虑通过“Java规范请求JSR-102”将它最终用作“Java标准扩展”。从2000年初就已经开始了JDOM开发。JDOM自身不包含解析器。它通常使用SAX2解析器来解析和验证输入XML文档(尽管它还可以将以前构造的DOM表示作为输入)。它包含一些转换器以将JDOM表示输出成SAX2事件流、DOM模型或XML文本文档。JDOM是在Apache许可证变体下发布的开放源码。,XML解析,2020/6/10,publicclassMyXMLReaderpublicstaticvoidmain(Stringarge)trySAXBuilderbuilder=newSAXBuilder();Documentdoc=builder.build(newFile(data.xml);Elementfoo=doc.getRootElement();ListallChildren=foo.getChildren();for(inti=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(Exceptione)e.printStackTrace();,XML解析,DOM4J,2020/6/10,虽然DOM4J代表了完全独立的开发结果,但最初,它是JDOM的一种智能分支。它合并了许多超出基本XML文档表示的功能,包括集成的XPath支持、XMLSchema支持以及用于大文档或流化文档的基于事件的处理。它还提供了构建文档表示的选项,它通过DOM4JAPI和标准DOM接口具有并行访问功能。从2000下半年开始,它就一直处于开发之中。DOM4J是一个非常非常优秀的JavaXMLAPI,具有性能优异、功能强大和极端易用使用的特点,同时它也是一个开放源代码的软件。如今你可以看到越来越多的Java软件都在使用DOM4J来读写XML,特别值得一提的是连Sun的JAXM也在用DOM4J.,XML解析,2020/6/10,publicclassMyXMLReaderpublicstaticvoidmain(Stringarge)tryFilef=newFile(data_10k.xml);SAXReaderreader=newSAXReader();Documentdoc=reader.read(f);Elementroot=doc.getRootElement();Elementfoo;for(Iteratori=root.elementIterator(VALUE);i.hasNext();)foo=(Element)i.next();System.out.print(车牌号码:+foo.elementText(NO);System.out.println(车主地址:+foo.elementText(ADDR);catch(Exceptione)e.printStackTrace();,XML解析,2020/6/10,JSON定义,JSON(JavaScriptObjectNotation)一种轻量级的数据交换格式,具有良好的可读和便于快速编写的特性。可在不同平台之间进行数据交换。JSON采用兼容性很高的、完全独立于语言文本格式,同时也具备类似于C语言的习惯(包括C,C+,C#,Java,JavaScript,Perl,Python等)体系的行为。这些特性使JSON成为理想的数据交换语言。JSON基于JavaScriptProgrammingLanguage,StandardECMA-2623rdEdition-December1999的一个子集。,JSON简介,2020/6/10,JSON格式,1,对象是属性、值对的集合。一个对象的开始于“”,结束于“”。每一个属性名和值间用“:”提示,属性间用“,”分隔。2,数组是有顺序的值的集合。一个数组开始于“”,结束于“”,值之间用“,”分隔。3,值可以是引号里的字符串、数字、true、false、null,也可以是对象或数组。这些结构都能嵌套。,JSON简介,2020/6/10,JSON示例,ChineseName:江苏,EnglishName:JiangSu,check_version:1.2,ChineseName:南京,EnglishName:NanJing,check_version:1.0,JSON简介,2020/6/10,JSON解析,JSON解析常用的方法一般有三种:原始的json-libGoogle的Gson阿里的Fastjson,json-libjson-lib:json-lib最开始的也是应用最广泛的json解析工具,json-lib不好的地方确实是依赖于很多第三方包,在J网站上,Java可以使用的解析Json的组件就有21种之多。,2020/6/10,importnet.sf.json.JSONArray;importnet.sf.json.JSONObject;publicclassjson_testpublicstaticvoidmain(Stringargs)/TODOAuto-generatedmethodstubStringjsonStr=newReadFile().readfile(src/test.xml);JSONArrayjsonArray=JSONArray.fromObject(jsonStr);intsize=jsonArray.size();System.out.println(Size:+size);for(inti=0;isize;i+)JSONObjectjsonObject=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解析,2020/6/10,Fastjson阿里的Fastjson:Fastjson是一个Java语言编写的高性能的JSON处理器,由阿里巴巴公司开发。无依赖,不需要例外额外的jar,能够直接跑在JDK上。FastJson在复杂类型的Bean转换Json上会出现一些问题,可能会出现引用的类型,导致Json转换出错,需要制定引用。FastJson采用独创的算法,将parse的速度提升到极致,超过所有json库。,2020/6/10,packagejson.resolve;importcom.alibaba.fastjson.JSONArray;publicclassjson_fastjsonpublicstaticvoidmain(Stringargs)StringjsonStr=newReadFile().readfile(src/test.xml);JSONArrayjsonArray=JSONArray.parseArray(jsonStr);for(inti=0;ijsonArray.size();i+)com.alibaba.fastjson.JSONObjectjsonObject=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解析,2020/6/10,所需jar包importjava.util.Iterator;importnet.sf.json.JSONObject;importcom.google.gson.Gson;importcom.google.gson.JsonArray;importcom.google.gson.JsonElement;importcom.google.gson.JsonObject;importcom.google.gson.JsonParser;,GsonGson:Gson是谷歌公司研发的。应用主要为toJson与fromJson两个转换函数,无依赖,不需要例外额外的jar,能够直接跑在JDK上。而在使用这种对象转换之前需先创建好对象的类型以及其成员才能成功的将JSON字符串成功转换成相对应的对象。类里面只要有get和set方法,Gson完全可以将复杂类型的json到bean或bean到json的转换,是JSON解析的神器。Gson在功能上面无可挑剔,但是性能上面比FastJson有所差距。,2020/6/10,JSON解析,2020/6/10,1)常规转换XML是节点名与值,JSON也是KEY与VALUE的键值对。这样的转换是最简单的。XML:张三转为JSON:Student:张三2)XML节点含有属性XML:张三转为JSONStudent:ID:1001,#text:张三,XML、JSON转换,2020/6/10,1,无属性节点,简单的字符串数组XML:nameageJSON:line:item:name,age,2,有属性的转为对象,无属性的则直接转为字符串XML:nameageJSON:line:item:font-size:20,#text:name,age,XML、JSON转换,3)有属性的节点生成对象,2020/6/10,4)XML的节点顺序性XML存在着节点之间的顺序,但当转为JSON后,有时顺序会被打乱。,XML、JSON转换,JSON:template:block:天空,地下,line:地平线,XML:天空地平线地下,2020/6/10,.XML的优点A.格式统一,符合标准;B.容易与其他系统进行远程交互,数据共享比较方便。.XML的缺点A.XML文件庞大,文件格式复杂,传输占带宽;B.服务器端和客户端都需要花费大量代码来解析XML,导致服务器端和客户端代码变得异常复杂且不易维护;C.客户端不同浏览器之间解析XML的方式不一致,需要重复编写很多代码;D.服务器端和客户端解析XML花费较多的资源和时间。,XML优缺点,XML、JSON对比,2020/6/10,JSON优缺点,.JSON的优点:A.数据格式比较简单,易于读写,格式都是压缩的,占用带宽小;B.易于解析,客户端JavaScript可以简单的通过eval()进行JSON数据的读取;C.支持多种语言,包括ActionScript,C,C#,ColdFusion,Java,JavaScript,Perl,PHP,Python,Ruby等服务器端语言,便于服务器端的解析;D.在PHP

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论