什么是Json序列化(json序列化是什么意思)

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);

根据实际情况,选择合适的序列化方法。

Published by

风君子

独自遨游何稽首 揭天掀地慰生平