前面提到過 Java 並沒有內建解析 Json 的套件,需要導入第三方的工具庫才可以解析並操作 Json,那除了先前使用的 org.json 之外,還有許多好用的工具庫可以使用,其中最有名的就是:
以下為了示範,我們先建立一個 Car 的物件,具有廠牌 (brand)、顏色 (color) 與出場年份 (years),方便接下來演示以 Gson 與 Jackson 示範序列化與反序列化。
// 範例 Car 類別
public class Car {
private String brand; //廠牌
private String color; //顏色
private int years; //出場年份
public String getBrand() {
return brand;
}
public void setBrand(String brand) {
this.brand = brand;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
public int getYears() {
return years;
}
public void setYears(int years) {
this.years = years;
}
}
官方說明:
https://github.com/google/gson
Jar包下載點:
https://maven-badges.herokuapp.com/maven-central/com.google.code.gson/gson
Gson 為 Google 因公司內部需求自行研發而來,後來成為開源 library,最主要的功能是提供了簡便的方式 toJson()
與 fromJson()
來完成 Java 物件(objects) 與 JSON 字串的轉換,對於複雜的物件對象也能有好的處理,是目前十分主流的解析 Json 的套件。
如果以 Maven 建立的專案,可以於 pom.xml 添加以下依賴項即可。
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.10.1</version>
</dependency>
使用 Gson 前要先透過 GsonBuilder() 建立一個 Gson 物件。
//建立 Gson 物件
Gson gson = new GsonBuilder().create();
以 fromJson(jsonString, Class)
可把 JSON 字串轉變為物件對象(反序列化)
// 使用 fromJson(jsonString, Class)
String jsonString = "{\"brand\":\"BMV\", \"color\":\"black\", \"years\":2000}";
Car car = gson.fromJson(jsonString, Car.class);
以 toJson()
方法獲取物件對象的 JSON 字串表示形式(序列化)。
String jsonString = gson.toJson(car);
官方說明:
https://github.com/FasterXML/jackson
Jar檔下載:
https://search.maven.org/search?q=g:com.fasterxml.jackson.core AND a:jackson-databind
Jackson 的使用非常廣泛用來解析 Json 的開源框架,更新的速度快,有良好的社群支持。在 Java Spring 框架也預設使用 Jackson 進行 JSON 處理。
Jackson 有三個核心模組,分別是 Streaming、Databid、Annotations,通過這些包可以方便的對 JSON 進行操作。
jackson-core
) 模組: 定義了一些流處理相關的 API 例如 JsonPaser 。jackson-annotations
)模組:提供了 Jackson 中註解的功能。jackson-databind
)模組: 在 Streaming
包的基礎上實現了物件對象的綁定相關 API 如 ObjectMapper,依賴於 Streaming
和 Annotations
包。如果以 Maven 建立的專案,可以於 pom.xml 添加以下依賴項即可。
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.15.2</version>
</dependency>
ObjectMapper 物件對映器是 Jackson 庫中最常用的一個類,他可以進行 Java 物件對象和 JSON 字串之間快速轉換。使用時要先建立一個 ObjectMapper 物件。
ObjectMapper objectMapper = new ObjectMapper();
透過 readValue()
方法可以將字串轉換成 Java 物件對象(反序列化);readValue()
並不限與讀取字串,亦可以用於讀取位元資料、檔案留等等。
String jsonString = "{\"brand\":\"BMV\", \"color\":\"black\", \"years\":2000}";
Car car = objectMapper.readValue(jsonString, Car.class);
透過 writeValue()
方法可以將 Java 物件轉換成 JSON 字串(序列化)。
String json = objectMapper.writeValueAsString(person);
至於如果想要 Gson 與 Jackson 彼此之間細部的差異比較,推薦可以參考下列文章的比較:
Jackson vs. Gson vs. JSON-B vs. JSON-P vs. org.JSON vs. Jsonpath | Java JSON libraries features comparison