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/n/304865.html
微信扫一扫
支付宝扫一扫