一、Json 簡介
JSON(JavaScript Object Notation)是一種輕量級的數據交換格式。它基於ECMAScript的一個子集,採用完全獨立於編程語言的文本格式來存儲和表示數據。簡潔和清晰的層次結構使得json成為理想的數據交換語言。比起xml的靈活性,json更加輕量級、易於閱讀和書寫。
下面是一個Json的例子:
{ "name": "John", "age": 30, "city": "New York" }
二、Java Json 序列化
1. jackson 庫
Jackson 是一款快速、低消耗、多功能的 Java 庫,用於處理 Java 對象與 JSON 數據之間的轉換。Jackson 提供了兩個主要的 API:一是 Streaming API,另一個是 Data Binding API。
2. Fastjson 庫
Fastjson 是一個 Java 的 JSON 解析器和生成器,它是目前最快的 JSON 處理器之一。
三、使用 Jackson 庫進行 Json 序列化
1. 添加 Jackson 庫的 Maven 依賴
在 pom.xml 文件中添加以下依賴:
<dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.9.8</version> </dependency>
2. 創建一個 Java 類
在項目中創建一個實體類,例如 Person:
public class Person { private String name; private int age; private String city; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getCity() { return city; } public void setCity(String city) { this.city = city; } }
3. 在代碼中實現序列化
下面是一個例子,將 person 對象序列化為 json 格式:
public class JsonDemo { public static void main(String[] args) throws JsonProcessingException { Person person = new Person(); person.setName("John"); person.setAge(30); person.setCity("New York"); ObjectMapper objectMapper = new ObjectMapper(); String jsonString = objectMapper.writeValueAsString(person); System.out.println(jsonString); } }
輸出結果如下:
{"name":"John","age":30,"city":"New York"}
四、使用 Fastjson 庫進行 Json 序列化
1. 添加 Fastjson 庫的 Maven 依賴
在 pom.xml 文件中添加以下依賴:
<dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.47</version> </dependency>
2. 在代碼中實現序列化
下面是一個例子,將 person 對象序列化為 json 格式:
public class JsonDemo { public static void main(String[] args) { Person person = new Person(); person.setName("John"); person.setAge(30); person.setCity("New York"); String jsonString = JSON.toJSONString(person); System.out.println(jsonString); } }
輸出結果如下:
{"name":"John","age":30,"city":"New York"}
五、Json 序列化注意事項
1.對象必須提供無參構造函數
Jackson 和 Fastjson 在編寫時,都需要默認構造函數(無參構造函數)。因為在反序列化時,需要先創建一個空對象,再給其成員變量賦值。所以,如果對象沒有無參構造函數,就會反序列化失敗。
2.對象成員變量必須保留 getter 和 setter 方法
在進行序列化和反序列化時,會通過反射獲取對象的成員變量,如果這些成員變量沒有提供 getter 和 setter 方法,則會出現異常。
3.其他注意事項
對於特殊字符,例如縮進和換行等,可以設置序列化的特性,比如 jackson 中可以設置 SerializationFeature.INDENT_OUTPUT。
結論
Java Json 序列化是一種比較常見的操作。本文詳細介紹了使用 Jackson 和 Fastjson 庫進行 Json 序列化的方法,同時講述了在進行序列化時需要注意的事項。相信對 Java 開發人員進行 Json 序列化應該能夠有所幫助。
原創文章,作者:PXNXN,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/368725.html