一、JSON解析
- 什么是JSON:JSON的全稱是”JavaScript Object Notation”,意思是JavaScript對象表示法,它是一種基于文本,獨立于語言的輕量級數據交換格式。
1.JSONObject
類型 : Number 數字型String 字符串型 Boolean 布爾型 Array 數組 Object 對象 null 空值
(1)JSON中不區分整數、小數等類型,而統一使用Number來存儲數字。
(2)Array表示數組,以中括號"[]"括起來,元素之間以逗號分隔,元素可以為任意類型。
(3)Object表示對象,類似于C語言中的結構體,以花括號"{}"括起來,其元素要求為鍵值對,key必須為String類型的,而value則可為任意類型。key和value之間以":"表示映射關系,元素之間也是以逗號分隔。
import org.json.JSONObject;
public class JSONObjectSample {
public static void main(String[] args) {
createJson();
}
private static void createJson() {
JSONObject obj = new JSONObject();
obj.put("name", "John");
obj.put("sex", "male");
obj.put("age", 22);
obj.put("is_student", true);
obj.put("hobbies", new String[] {"hiking", "swimming"});
//調用toString()方法可直接將其內容打印出來
System.out.println(obj.toString());
}
}
2.Fastjson
Fastjson 是一個 Java 庫,可以將 Java 對象轉換為 JSON 格式,當然它也可以將 JSON 字符串轉換為 Java 對象。
- 將 Java 對象轉換為 JSON 格式
public class Person {
@JSONField(name = "AGE")
private int age;
@JSONField(name = "FULL NAME")
private String fullName;
@JSONField(name = "DATE OF BIRTH")
private Date dateOfBirth;
public Person(int age, String fullName, Date dateOfBirth) {
super();
this.age = age;
this.fullName= fullName;
this.dateOfBirth = dateOfBirth;
}
// 標準 getters & setters
}
- 可以使用 JSON.toJSONString() 將 Java 對象轉換換為 JSON 對象:
private List<Person> listOfPersons = new ArrayList<Person>();
@Before
public void setUp() {
listOfPersons.add(new Person(15, "John Doe", new Date()));
listOfPersons.add(new Person(20, "Janette Doe", new Date()));
}
@Test
public void whenJavaList_thanConvertToJsonCorrect() {
String jsonOutput= JSON.toJSONString(listOfPersons);
}
更多的使用說明和使用方法:
https://github.com/alibaba/fastjson
https://github.com/alibaba/fastjson/wiki
2.Gson
Gson的應用主要為toJson與fromJson兩個轉換函數,而在使用這種對象轉換之前需先創建好對象的類別以及其成員才能成功的將JSON字符串成功轉換成相對應的對象。
詳情請參考:
https://zh.wikipedia.org/wiki/Gson
對比:
- Gson的應用主要為toJson與fromJson兩個轉換函數,無依賴,不需要例外額外的jar,能夠直接跑在JDK上。 在使用這種對象轉換之前,需先創建好對象的類型以及其成員才能成功的將JSON字符串成功轉換成相對應的對象。 類里面只要有get和set方法,Gson完全可以實現復雜類型的json到bean或bean到json的轉換,是JSON解析的神器
- FastJson采用獨創的算法,將parse的速度提升到極致,超過所有json庫。
- JsonObjec簡單易用,無需額外jdk,對于復雜的json解析使用比較困難
2.XML解析
1.DOM解析:
優點:1、形成了樹結構,有助于更好的理解、掌握,且代碼容易編寫。2、解析過程中,樹結構保存在內存中,方便修改。
缺點:1、由于文件是一次性讀取,所以對內存的耗費比較大。2、如果XML文件比較大,容易影響解析性能且可能會造成內存溢出。
2.SAX解析:
優點:1、采用事件驅動模式,對內存耗費比較小。2、適用于只處理XML文件中的數據時。
缺點:1、編碼比較麻煩。2、很難同時訪問XML文件中的多處不同數據。
3.PULL解析:
Pull比DOM要好 ,Pull簡潔Pull解析的方式是同步的
3.總結:
- 內存占用:SAX、Pull比DOM要好;
- 編程方式:SAX采用事件驅動,在相應事件觸發的時候,會調用用戶編好的方法,也即每解析一類XML,就要編寫一個新的適合該類XML的處理類。DOM是W3C的規范,Pull簡潔。
- 訪問與修改:SAX采用流式解析,DOM隨機訪問。
- 訪問方式:SAX,Pull解析的方式是同步的,DOM逐字逐句。