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-hk/n/304865.html