数据交换格式Json与XML
什么是數(shù)據(jù)交換格式:
主流的有Json、XML、HTML。
數(shù)據(jù)交換格式的應用場景:
移動端(安卓,IOS)通訊方式采用http協(xié)議+Json格式的restful風格。
很多互聯(lián)網(wǎng)公司都是用Http協(xié)議+Json格式。
因為XML比較重WebService服務采用Http協(xié)議+XML格式的銀行項目使用比較多。
?
什么是Json數(shù)據(jù)交換格式:
Json:相對于XML來說是一種輕量級數(shù)據(jù)交換格式。因為XML比較復雜,需要大量代碼,所以客戶端和服務器端數(shù)據(jù)交換通常使用Json來交換。
XML:是一種重量級的數(shù)據(jù)交換格式(標記語言)。
Json的基本語法:
| { "id": "小馬", "name": "男", "itemts": [{ "ids": "小米", "name": "沒峨眉" }, { "id": "29", "sex": "女" }] } |
Java操作Json有哪些框架?
Gson(谷歌),fastjson(阿里巴巴)----主流,jackson(Springmvc)
第一種是直接使用Json中的方法進行解析:
首先新建一個maven工程,導入fastjson包。
| <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.47</version> </dependency> |
新建一個TestDemo:
| public?class?TestDemo { static?String json="{\"id\": \"小馬\",\"name\": \"男\(zhòng)",\"itemts\": [{\"id\": \"小米\",\"name\": \"沒峨眉\"}, {\"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); } } } |
以上這種方式太過麻煩,很少公司使用,一般使用對象封裝好之后,直接拿來用。
首先新建一個User類。注意:User類里面的屬性與Json中的對象一致
| public?class?User { private?String id; private?String name; private?List<Itemts> itemts; } 加上get跟set和toString方法 |
再新建一個Itemts類:
| public?class?Itemts?{ private?String id; private?String name; } 也是加上get、set、toString方法。 |
新建一個測試類
| public?class?TestDemo { static?String json="{\"id\": \"小馬\",\"name\": \"男\(zhòng)",\"itemts\": [{\"id\": \"小米\",\"name\": \"沒峨眉\"}, {\"id\": \"29\",\"name\": \"女\"}]}"; public?static?void?main(String[] args) { //使用對象的方式解析json,使用的方便,廣泛。 User user=new?JSONObject().parseObject(json, User.class); System.out.println(user.toString()); } } |
第二種是使用類的方式封裝json,還是使用以上的User跟Itemts類。
| 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", "小紅"); //把對象放進數(shù)組里面 array.add(object1); array.add(object2); //把數(shù)組放進對象里面 root.put("itemt", array); System.out.println(root.toString()); }} |
還有另一種實體類封裝Json字符串
| public?class?TestDemo2 { public?static?void?main(String[] args) { //使用實體類封裝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全程是:可擴展的標記語言,主要用于描述數(shù)據(jù)和用作配置文件。
XML聲明:指明所用XML的版本,文檔的編碼,文檔的獨立性信息。
文檔類型聲明:指出XML文檔所用的DTD
元素:有開始標簽,元素內容和結束標簽構成。
注釋:以結束,用于對文檔中的內容起到一個解釋的作用。
處理指令:通過處理指令來通知其他應用程序來處理非XML格式的數(shù)據(jù),格式為XML文檔的根元素被稱為文檔元素,它和在其外部出現(xiàn)的處理指令,注釋等作為文檔實體字節(jié)點,根元素本身與其內部的子元素也是一棵樹。
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不適合大文件的解析,因為它是一下子將文件加載到內存中,所以有可能出現(xiàn)內存溢出,sax是基于事件來對xml進行解析的,所以他可以解析大文件的xml,也正是因為如此,所以dom4j可以對xml進行靈活的增刪改查和導航,而sax沒有這么強的靈活性,所以sax經(jīng)常是用來解析大型xml文件,而要對xml文件進行一些靈活(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é)點 Element rootElement?= read.getRootElement(); getNods(rootElement); } static?void?getNods(Element rootElement) { //得到根節(jié)點名稱 String name?= rootElement.getName(); System.out.println("根節(jié)點名稱"+name); //把子節(jié)點放進List集合里 List<org.dom4j.Attribute> attributes?= rootElement.attributes(); for?(org.dom4j.Attribute attribute?: attributes) { System.out.println("節(jié)點名稱"+attribute.getName()+"節(jié)點屬性"+attribute.getValue()); } String value=rootElement.getTextTrim().trim(); if(!value.equals("")) { System.out.println("節(jié)點的值是"+value); } //使用迭代器遍歷子節(jié)點 Iterator<Element> elementIterator?= rootElement.elementIterator(); while(elementIterator.hasNext()) { Element next?= (Element) elementIterator.next(); getNods(next); } } } |
結果是
?
?
轉載于:https://www.cnblogs.com/InterfaceAOP/p/10454569.html
總結
以上是生活随笔為你收集整理的数据交换格式Json与XML的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: “零代码”时代已来!程序员真的要去送外卖
- 下一篇: asp.net ajax控件工具集 Au