数据交换格式Json与XML
什么是數(shù)據(jù)交換格式:
主流的有Json、XML、HTML。
數(shù)據(jù)交換格式的應(yīng)用場(chǎng)景:
移動(dòng)端(安卓,IOS)通訊方式采用http協(xié)議+Json格式的restful風(fēng)格。
很多互聯(lián)網(wǎng)公司都是用Http協(xié)議+Json格式。
因?yàn)?/span>XML比較重WebService服務(wù)采用Http協(xié)議+XML格式的銀行項(xiàng)目使用比較多。
?
什么是Json數(shù)據(jù)交換格式:
Json:相對(duì)于XML來(lái)說(shuō)是一種輕量級(jí)數(shù)據(jù)交換格式。因?yàn)?/span>XML比較復(fù)雜,需要大量代碼,所以客戶端和服務(wù)器端數(shù)據(jù)交換通常使用Json來(lái)交換。
XML:是一種重量級(jí)的數(shù)據(jù)交換格式(標(biāo)記語(yǔ)言)。
Json的基本語(yǔ)法:
| { "id": "小馬", "name": "男", "itemts": [{ "ids": "小米", "name": "沒(méi)峨眉" }, { "id": "29", "sex": "女" }] } |
Java操作Json有哪些框架?
Gson(谷歌),fastjson(阿里巴巴)----主流,jackson(Springmvc)
第一種是直接使用Json中的方法進(jìn)行解析:
首先新建一個(gè)maven工程,導(dǎo)入fastjson包。
| <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.47</version> </dependency> |
新建一個(gè)TestDemo:
| public?class?TestDemo { static?String json="{\"id\": \"小馬\",\"name\": \"男\(zhòng)",\"itemts\": [{\"id\": \"小米\",\"name\": \"沒(méi)峨眉\"}, {\"id\": \"29\",\"name\": \"女\"}]}"; public?static?void?main(String[] args) { JSONObject jsonObject=new JSONObject().parseObject(json); String id=jsonObject.getString("id"); String name=jsonObject.getString("name"); System.out.println(id+","+name); JSONArray array=jsonObject.getJSONArray("itemts"); for(int?i=0;i<array.size();i++) { JSONObject object=array.getJSONObject(i); String ids=object.getString("ids"); String names=object.getString("name"); System.out.println(ids+","+names); } } } |
以上這種方式太過(guò)麻煩,很少公司使用,一般使用對(duì)象封裝好之后,直接拿來(lái)用。
首先新建一個(gè)User類(lèi)。注意:User類(lèi)里面的屬性與Json中的對(duì)象一致
| public?class?User { private?String id; private?String name; private?List<Itemts> itemts; } 加上get跟set和toString方法 |
再新建一個(gè)Itemts類(lèi):
| public?class?Itemts?{ private?String id; private?String name; } 也是加上get、set、toString方法。 |
新建一個(gè)測(cè)試類(lèi)
| public?class?TestDemo { static?String json="{\"id\": \"小馬\",\"name\": \"男\(zhòng)",\"itemts\": [{\"id\": \"小米\",\"name\": \"沒(méi)峨眉\"}, {\"id\": \"29\",\"name\": \"女\"}]}"; public?static?void?main(String[] args) { //使用對(duì)象的方式解析json,使用的方便,廣泛。 User user=new?JSONObject().parseObject(json, User.class); System.out.println(user.toString()); } } |
第二種是使用類(lèi)的方式封裝json,還是使用以上的User跟Itemts類(lèi)。
| public?class?TestDemo2 { public?static?void?main(String[] args) { JSONObject root=new JSONObject(); root.put("id","10"); root.put("name", "小米"); JSONArray array=new JSONArray(); JSONObject object1=new JSONObject(); object1.put("itemts", "29"); object1.put("itemtsName", "小馬"); JSONObject object2=new JSONObject(); object2.put("itemts", "38"); object2.put("itemtsName", "小紅"); //把對(duì)象放進(jìn)數(shù)組里面 array.add(object1); array.add(object2); //把數(shù)組放進(jìn)對(duì)象里面 root.put("itemt", array); System.out.println(root.toString()); }} |
還有另一種實(shí)體類(lèi)封裝Json字符串
| public?class?TestDemo2 { public?static?void?main(String[] args) { //使用實(shí)體類(lèi)封裝json字符串 User user=new?User(); user.setId("29"); user.setName("小馬"); List<Itemts> list=new?ArrayList<Itemts>(); Itemts itemts1=new?Itemts(); itemts1.setId("28"); itemts1.setName("小紅"); Itemts itemts2=new?Itemts(); itemts2.setId("34"); itemts2.setName("小和"); list.add(itemts1); list.add(itemts2); user.setItemts(list); System.out.println(user.toString()); } } |
Json到此就告一段落。
XML解析方式:
什么是XML?
XML全程是:可擴(kuò)展的標(biāo)記語(yǔ)言,主要用于描述數(shù)據(jù)和用作配置文件。
XML聲明:指明所用XML的版本,文檔的編碼,文檔的獨(dú)立性信息。
文檔類(lèi)型聲明:指出XML文檔所用的DTD
元素:有開(kāi)始標(biāo)簽,元素內(nèi)容和結(jié)束標(biāo)簽構(gòu)成。
注釋:以結(jié)束,用于對(duì)文檔中的內(nèi)容起到一個(gè)解釋的作用。
處理指令:通過(guò)處理指令來(lái)通知其他應(yīng)用程序來(lái)處理非XML格式的數(shù)據(jù),格式為XML文檔的根元素被稱(chēng)為文檔元素,它和在其外部出現(xiàn)的處理指令,注釋等作為文檔實(shí)體字節(jié)點(diǎn),根元素本身與其內(nèi)部的子元素也是一棵樹(shù)。
XML樣例:
| <?xml version="1.0" encoding="UTF-8"?> ? <students> ? ????<student1 id="001"> ? ????????<property>houe ary you</property> ????</student1> ? ????<student2 id="002"> ? ???????<property>houe ary you2</property> ????</student2> ? </students> ? |
XML解析方式?
Dom4j、Sax、Pull三種常用的。
Dom4j與Sax區(qū)別
?dom4j不適合大文件的解析,因?yàn)樗且幌伦訉⑽募虞d到內(nèi)存中,所以有可能出現(xiàn)內(nèi)存溢出,sax是基于事件來(lái)對(duì)xml進(jìn)行解析的,所以他可以解析大文件的xml,也正是因?yàn)槿绱?#xff0c;所以dom4j可以對(duì)xml進(jìn)行靈活的增刪改查和導(dǎo)航,而sax沒(méi)有這么強(qiáng)的靈活性,所以sax經(jīng)常是用來(lái)解析大型xml文件,而要對(duì)xml文件進(jìn)行一些靈活(crud)操作就用dom4j。
?
使用Dom4j解析xml代碼:
首先添加dom4j的jar包
| <dependency> ????<groupId>org.dom4j</groupId> ????<artifactId>dom4j</artifactId> ????<version>2.1.1</version> </dependency> |
Java代碼
| public?class?TestXML { public?static?void?main(String[] args) throws?DocumentException { SAXReader reader=new?SAXReader(); //讀取文件目錄 Document read?= reader.read("E:\\student.xml"); //得到文件根節(jié)點(diǎn) Element rootElement?= read.getRootElement(); getNods(rootElement); } static?void?getNods(Element rootElement) { //得到根節(jié)點(diǎn)名稱(chēng) String name?= rootElement.getName(); System.out.println("根節(jié)點(diǎn)名稱(chēng)"+name); //把子節(jié)點(diǎn)放進(jìn)List集合里 List<org.dom4j.Attribute> attributes?= rootElement.attributes(); for?(org.dom4j.Attribute attribute?: attributes) { System.out.println("節(jié)點(diǎn)名稱(chēng)"+attribute.getName()+"節(jié)點(diǎn)屬性"+attribute.getValue()); } String value=rootElement.getTextTrim().trim(); if(!value.equals("")) { System.out.println("節(jié)點(diǎn)的值是"+value); } //使用迭代器遍歷子節(jié)點(diǎn) Iterator<Element> elementIterator?= rootElement.elementIterator(); while(elementIterator.hasNext()) { Element next?= (Element) elementIterator.next(); getNods(next); } } } |
結(jié)果是
?
?
轉(zhuǎn)載于:https://www.cnblogs.com/InterfaceAOP/p/10454569.html
總結(jié)
以上是生活随笔為你收集整理的数据交换格式Json与XML的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: “零代码”时代已来!程序员真的要去送外卖
- 下一篇: 我又写了一本书?!