JSON序列化与反序列化

2020-02-05大约6分钟

既然说JSON是一种轻量级的数据交换格式 ,那么就要理解序列化反序列化 了。

通常,在写代码的时候,有时候会需要把数据保存到文件,或者通过网络传输给其他的程序。如果一个程序是用Java写的,另一个程序是Python的,那么怎么做才能把数据对象在两个程序之间传递呢?

那就是先把数据对象转换成一种两者都能够轻松处理的一种格式的数据,然后需要的程序自己去处理这种数据。比如Java把数据对象转成JSON格式的数据,然后Python就可以把JSON格式数据转成Python内部的对象,这就达到数据交换的目的了。

序列化 (Serialize):把程序里的数据对象转成JSON或其他格式数据。目的是让这个数据能够让别的程序读到并能解析出来。

反序列化 (Deserialize):把JSON或其他格式数据,转成程序里的对象,这个就叫反序列化。

图片

序列化/反序列化,不是仅仅指JSON或XML这种格式。某些语言有些内置的序列化的功能,比如Java的这个例子里,ObjectOutputStreamObjectInputStream就做的是序列化和反序列化:

public static void serializeDataOut(IHandler ish)throws IOException{
    String fileName= "Test.txt";
    FileOutputStream fos = new FileOutputStream(fileName);
    ObjectOutputStream oos = new ObjectOutputStream(fos);
    oos.writeObject(ish);
    oos.close();
}

public static IHandler serializeDataIn(){
   String fileName= "Test.txt";
   FileInputStream fin = new FileInputStream(fileName);
   ObjectInputStream ois = new ObjectInputStream(fin);
   IHandler iHandler= (IHandler) ois.readObject();
   ois.close();
   return iHandler;
}

如果只是供Java程序之间,或者保存当前Java程序的状态,用这种语言提供的原生的序列化、反序列化的方式是最简单的,但缺点就是别的语言的程序是无法(或不容易)读取的。