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);
根据实际情况,选择合适的序列化方法。