1. 程式人生 > 其它 >XML和JSON學習筆記

XML和JSON學習筆記

技術標籤:XML和JSON的學習筆記java

          **XML和JSON學習筆記**

XML的簡介
1.什麼是XML:
XML是一種可擴充套件性標記語言。具有自我描述性,平臺無關性的 特點,是一門獨立的標記語言。用於標記電子檔案使其具有結構性的標記語言,可以用來標記資料、定義資料型別,是一種允許使用者對自己的標記語言進行定義的源語言。 XML使用DTD(document type definition)文件型別定義來組織資料;格式統一,跨平臺和語言,早已成為業界公認的標準。
2.我們使用XML來做什麼?
1.資料儲存
2.網路資料傳輸
3.配置檔案
3.XML的基本格式


1.XML文件的基本宣告
<?xml version="1.0" encoding= "UTF-8"?>
2.標記(元素/標籤/節點)
XML是有一個一個的節點來組成的。
語法:
開始標記(開放標記): <標記名稱>
結束標記(閉合標記): </標記名稱>

其中自定義的名稱存在一下命名規範:
1.名稱可以含字母、數字以及其他的字元
2.名稱不能以數字或者標點符號開始
3.名稱不能以字元 “xml”(或者 XML、Xml)開始
4.名稱不能包含空格,不能包含冒號(:)
5.名稱區分大小寫
標記內容: 開始標記與結束標記之間 ,是標記的內容。3.一個文件中,有且定有一個根節點。

4.其中標記是可以巢狀的,但是不允許交叉。標記的名稱是可以重複的。
5.標記除了開始和結束標記之外還存在屬性。標記的屬性在開始標記處宣告,包含屬性名和屬性值。屬性值使用引號包含,多個屬性之間使用空格隔開。屬性名是不允許重複的。然後每一個屬性都是一個鍵值對的感覺。
6.註釋
註釋不能放在宣告的前面。註釋是不可以巢狀的,註釋的標識為:開始註釋:<加問號–
結束註釋為:–>
案例:
描述一組圖書books, 至少包含3本書
圖書book包含
圖書名稱name
圖書簡介info ,
以及屬性id

<?xml version="1.0" encoding="UTF-8"?> 資料結構 描述了一些資料結構 水滸傳 描述了108好漢的故事 麻子 描述了麻子**的一生

4.關於Java中XML的解析
Java中的四種解析方式
1.SAX解析
解析的機制是事件驅動解析。逐行解析XML檔案,每當讀到一個檔案的標籤時,就會驅動事件。我們可以在遇到這些標籤的時候來編寫程式來進行相應的處理。
優點:
分析能夠立即開始,而不是等待所有的資料被處理
逐行載入,節省記憶體.有助於解析大於系統記憶體的文件
有時不必解析整個文件,它可以在某個條件得到滿足時停止解析.
缺點:
1. 單向解析,無法定位文件層次,無法同時訪問同一文件的不同部分資料(因為逐行解析, 當解析第n行是, 第n-1行已經被釋放了, 無法在進行操作了)。
2. 無法得知事件發生時元素的層次, 只能自己維護節點的父/子關係。
3. 只讀解析方式, 無法修改XML文件的內容。
2.DOM解析
是用與平臺和語言無關的方式表示XML文件的官方W3C標準,分析該結構通常需要載入整個文件和記憶體中建立文件樹模型.程式設計師可以通過操作文件樹, 來完成資料的獲取 修改 刪除等。
優點:
文件在記憶體中載入, 允許對資料和結構做出更改.
訪問是雙向的,可以在任何時候在樹中雙向解析資料
缺點:
文件全部載入在記憶體中 , 消耗資源大。
3.JDOM解析
目的是成為Java特定文件模型,它簡化與XML的互動並且比使用DOM實現更快。由於是第一個Java特定模型,JDOM一直得到大力推廣和促進。
優點:
使用具體類而不是介面,簡化了DOM的API。
大量使用了Java集合類,方便了Java開發人員。
缺點:
沒有較好的靈活性。
效能不是那麼優異。
4.DOM4J解析
它是JDOM的一種智慧分支。它合併了許多超出基本XML文件表示的功能,包括整合的XPath支援、XML Schema支援以及用於大文件或流化文件的基於事件的處理。它還提供了構建文件表示的選項,DOM4J是一個非常優秀的Java XML API,具有效能優異、功能強大和極端易用使用的特點,同時它也是一個開放原始碼的軟體。如今你可以看到越來越多的Java軟體都在使用DOM4J來讀寫XML。

掌握DOM4J解析XML檔案的步驟
步驟:

  1. 引入jar檔案 dom4j.jar。
  2. 建立一個指向XML檔案的輸入流
    FileInputStream fis = new FileInputStream(“xml檔案的地址”);
  3. 建立一個XML讀取工具物件
    SAXReader sr = new SAXReader();
  4. 使用讀取工具物件, 讀取XML文件的輸入流 , 並得到文件物件
    Document doc = sr.read(fis);
  5. 通過文件物件, 獲取XML文件中的根元素物件
    Element root = doc.getRootElement();
    其中文件物件是指文件物件 Document
    元素物件 Element
    沒有較好的靈活性。
    效能不是那麼優異。
  6. DOM4J解析
    它是JDOM的一種智慧分支。它合併了許多超出基本XML文件表示的功能,包括整合的XPath
    支援、XML Schema支援以及用於大文件或流化文件的基於事件的處理。它還提供了構建文件表示的選項,
    DOM4J是一個非常優秀的Java XML API,具有效能優異、功能強大和極端易用使用的特點,同時它也是一
    個開放原始碼的軟體。如今你可以看到越來越多的Java軟體都在使用DOM4J來讀寫XML。
    目前許多開源專案中大量採用DOM4J , 例如:Hibernate
    步驟:
  7. 引入jar檔案 dom4j.jar
  8. 建立一個指向XML檔案的輸入流
    FileInputStream fis = new FileInputStream(“xml檔案的地址”);
  9. 建立一個XML讀取工具物件
    SAXReader sr = new SAXReader();
  10. 使用讀取工具物件, 讀取XML文件的輸入流 , 並得到文件物件
    Document doc = sr.read(fis);
  11. 通過文件物件, 獲取XML文件中的根元素物件
    Element root = doc.getRootElement();

其中文件物件Document指的是載入到記憶體的 整個XML文件。元素物件Element是指XML文件之中的單個節點。

程式碼實現本地XML文件的解析和網路XML文件的解析。
在得到文件物件之後可以使用XPath的方式來解析XML。
熟悉Java生成XML文件的過程。

JSON簡介
JSON是是一種輕量級的資料轉換格式。也是因為xml繁瑣,而且每次傳輸資料的時候需要將xml形式的資料解析成DOM物件再提取資料,所以就出現了利用Javascript中一些模式來表示結構化資料的JSON,它可以解析成JavaScript物件的資料格式,再之後ECMAScript5對解析json的行為進行了規範,定義了全域性物件JSON。
JSON的表現形式:
一個物件, 由一個大括號表示.
括號中 描述物件的屬性 . 通過鍵值對來描述物件的屬性
(可以理解為, 大括號中, 包含的是一個個的鍵值對.)
格式:
鍵與值之間使用冒號連線, 多個鍵值對之間使用逗號分隔.
鍵值對的鍵 應使用引號引住 (通常Java解析時, 鍵不使用引號會報錯. 而JS能正確解
析.)
鍵值對的值, 可以是JS中的任意型別的資料。
Java中JSON是做什麼的?
1.將Java中的物件 快速的轉換為 JSON格式的字串.
2.將JSON格式的字串, 轉換為Java的物件.
怎麼進行轉換?
1.Gson方式
1.將物件轉為JSON字元格式
轉換JSON字串的步驟:

  1. 引入JAR包
  2. 在需要轉換JSON字串的位置編寫如下程式碼即可:
    String json = new Gson().toJSON(要轉換的物件);
    2.將JSON字串轉為物件格式
  3. 引入JAR包
  4. 在需要轉換Java物件的位置, 編寫如下程式碼:
    物件 = new Gson().fromJson(JSON字串,物件型別.class);
    2.fastJson方式
    1.將字串轉為物件格式
  5. 引入JAR包
  6. 在需要轉換Java物件的位置, 編寫如下程式碼:
    型別 物件名=JSON.parseObject(JSON字串, 型別.class);

    List<型別> list=JSON.parseArray(JSON字串,型別.class);
    2.將物件轉為JSON字串
  7. 引入JAR包
  8. 在需要轉換JSON字串的位置編寫如下程式碼即可:
    String json=JSON.toJSONString(要轉換的物件);
    JSON和XML的區別
    (1).XML的優缺點
    <1>.XML的優點

格式統一,符合標準;
容易與其他系統進行遠端互動,資料共享比較方便。

<2>.XML的缺點

XML檔案龐大,檔案格式複雜,傳輸佔頻寬;
伺服器端和客戶端都需要花費大量程式碼來解析XML,導致伺服器端和客戶端程式碼變得異常複雜且不易維護;
客戶端不同瀏覽器之間解析XML的方式不一致,需要重複編寫很多程式碼;伺服器端和客戶端解析XML花費較多的資源和時間。
(2).JSON的優缺點

<1>.JSON的優點:

資料格式比較簡單,易於讀寫,格式都是壓縮的,佔用頻寬小;
易於解析,客戶端JavaScript可以簡單的通過eval()進行JSON資料的讀取;
支援多種語言,包括ActionScript, C, C#, ColdFusion, Java, JavaScript, Perl, PHP, Python, Ruby等伺服器端語言,便於伺服器端的解析;
在PHP世界,已經有PHP-JSON和JSON-PHP出現了,偏於PHP序列化後的程式直接呼叫,PHP伺服器端的物件、陣列等能直接生成JSON格式,便於客戶端的訪問提取;
因為JSON格式能直接為伺服器端程式碼使用,大大簡化了伺服器端和客戶端的程式碼開發量,且完成任務不變,並且易於維護。
<2>.JSON的缺點

沒有XML格式這麼推廣的深入人心和喜用廣泛,沒有XML那麼通用性;
JSON格式目前在Web Service中推廣還屬於初級階段。

3.XML和JSON的優缺點對比
(1).可讀性方面。

JSON和XML的資料可讀性基本相同,JSON和XML的可讀性可謂不相上下,一邊是建議的語法,一邊是規範的標籤形式,XML可讀性較好些。

(2).可擴充套件性方面。

XML天生有很好的擴充套件性,JSON當然也有,沒有什麼是XML能擴充套件,JSON不能的。

(3).編碼難度方面。

XML有豐富的編碼工具,比如Dom4j、JDom等,JSON也有json.org提供的工具,但是JSON的編碼明顯比XML容易許多,即使不借助工具也能寫出JSON的程式碼,可是要寫好XML就不太容易了。

(4).解碼難度方面。

XML的解析得考慮子節點父節點,讓人頭昏眼花,而JSON的解析難度幾乎為0。

(5).解析手段方面。

JSON和XML同樣擁有豐富的解析手段。

(6).資料體積方面。

JSON相對於XML來講,資料的體積小,傳遞的速度更快些。

(7).資料互動方面。

JSON與JavaScript的互動更加方便,更容易解析處理,更好的資料互動。

(8).資料描述方面。

JSON對資料的描述性比XML較差。

(9).傳輸速度方面。

JSON的速度要遠遠快於XML。