Json(JavaScript Object Notation)是一種輕量級的數據交換格式,易於讀寫,便於機器解析和生成。Json序列化就是將對象或數據結構轉換成Json格式的字符串。Json序列化後數據傳輸、存儲和處理都更方便。
Json序列化
Json序列化是指將一個對象序列化為Json格式的字符串。Json格式的字符串一般具有這樣的特徵:
{
"name": "Tom",
"age": 23,
"gender": "Male"
}
對象可以是類對象,也可以是數組、字典等數據結構。通過Json序列化可以將對象轉換為Json字符串,存儲到文件中,也可以在網絡通信中傳輸。
Json反序列化是什麼意思
Json反序列化是指將一個Json格式的字符串轉換為對象。Json格式的字符串可以通過網絡通信獲取,也可以從文件中讀取。
String jsonStr = "{\n" +
" \"name\": \"Tom\",\n" +
" \"age\": 23,\n" +
" \"gender\": \"Male\"\n" +
"}";
Gson gson = new Gson();
Person person = gson.fromJson(jsonStr, Person.class);
Json反序列化常用工具類庫有Json、Gson、FastJson等。
Json為什麼要序列化
Json序列化是為了解決數據的傳輸、存儲和處理問題。傳輸數據需要解決數據的格式問題,不同的語言和平台對數據的處理方式不一樣,要想在兩個平台或不同語言之間進行數據傳輸,就需要一個通用的數據格式。存儲數據也需要解決數據的格式問題。處理數據需要快速的處理大量數據,Json格式的數據可以快速進行讀取、遍歷、操作和篩選。
可序列化是什麼意思
可序列化是指一個類對象可以序列化。一個類對象要想序列化和反序列化,需要滿足Java序列化標準,即實現Serializable接口。如果不實現該接口,該對象就不能進行序列化。
// 可序列化類
public class Person implements Serializable {
private static final long serialVersionUID = 1L;
private String name;
private Integer age;
private String gender;
// 省略getter和setter方法
}
// 不可序列化類
public class Animal {
private String name;
private Integer age;
private String gender;
// 省略getter和setter方法
}
Json反序列化失敗是什麼意思
Json反序列化失敗是指將一個Json格式的字符串轉換成Java對象失敗。反序列化失敗的原因有很多,比如Json格式錯誤、Java對象類結構不匹配、格式類型不匹配等。一般通過捕捉異常或者判空來解決反序列化失敗問題。
String jsonStr = "{\n" +
" \"name\": \"Tom\",\n" +
"}";
Gson gson = new Gson();
Person person = null;
try {
person = gson.fromJson(jsonStr, Person.class);
} catch (JsonSyntaxException e) {
e.printStackTrace();
System.out.println("json格式錯誤");
}
if (person == null) {
System.out.println("json反序列化失敗");
}
Json序列化和反序列化方法選取
Json序列化和反序列化方法有很多種,常見的有Java自帶的序列化和Gson的序列化。Java自帶的序列化需要實現Serializable接口,但是序列化體積大、序列化速度慢、面向Java對象,不支持跨平台。Gson序列化有很高的可擴展性,序列化體積小、速度快,支持跨語言和平台,但是不能序列化內部類和匿名類。
// 使用java自帶序列化
public class SerializeUtil {
public static byte[] serialize(Object obj) throws IOException {
ByteArrayOutputStream byteStream = new ByteArrayOutputStream();
ObjectOutputStream objStream = new ObjectOutputStream(byteStream);
objStream.writeObject(obj);
objStream.flush();
byte[] bytes = byteStream.toByteArray();
objStream.close();
byteStream.close();
return bytes;
}
public static Object deserialize(byte[] bytes) throws IOException, ClassNotFoundException {
ByteArrayInputStream byteStream = new ByteArrayInputStream(bytes);
ObjectInputStream objStream = new ObjectInputStream(byteStream);
Object obj = objStream.readObject();
objStream.close();
byteStream.close();
return obj;
}
}
// 使用Gson序列化
String jsonStr = gson.toJson(person);
person = gson.fromJson(jsonStr, Person.class);
根據實際情況,選擇合適的序列化方法。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/304865.html
微信掃一掃
支付寶掃一掃