Skip to content

序列化和反序列化

在 Java 中,JSON 和对象之间的转换通常涉及 序列化反序列化,常用的库有:

  • Jackson(最常用)
  • Gson(Google提供)
  • Fastjson(阿里提供)

其中,Jackson 是一个高性能的 JSON 处理库,提供了强大的功能来转换 Java 对象和 JSON 数据。

主要组件

Jackson 主要由以下三个核心组件组成:

组件描述作用
ObjectMapper核心类用于对象和 JSON 之间转换
JsonParser 和 JsonGenerator低级流式API用于解析和生成JSON
Annotations注解支持通过注解自定义 JSON 序列化和反序列化

基本使用

Jackson包下载地址:Jackson下载地址

需要下载 3 个包:jackson-annotations、jackson-core、jackson-databind。

序列化

Java对象 转为 Json字符串的操作。

java
@Test
public void testWriteJson() throws JsonProcessingException {
  Dog dog = new Dog("小黄");
  Person person = new Person("王一博", 23, dog);

  ObjectMapper mapper = new ObjectMapper();
  String s = mapper.writeValueAsString(person);
  System.out.println(s);
  // {"name":"王一博","age":23,"dog":{"name":"小黄"}}
}
java
public class Person {
  private String name;
  private Integer age;
  private Dog dog;

  public Person() {
  }

  public Person(String name, Integer age, Dog dog) {
    this.dog = dog;
    this.age = age;
    this.name = name;
  }
}
java
public class Dog {
  private String name;

  public Dog() {
  }

  public Dog(String name) {
    this.name = name;
  }
}

反序列化

Json字符串 转为 Java对象的操作。

java
@Test
public void testReadJson() throws IOException {
  String json = "{\"name\":\"王一博\",\"age\":23,\"dog\":{\"name\":\"小黄\"}}";
  ObjectMapper mapper = new ObjectMapper();
  Person person = mapper.readValue(json, Person.class);
  System.out.println("person = " + person);
}

扩展使用

Map序列化

Map序列化以后,也是一个 对象字符串 的形式。

java
@Test
public void testMapToJson() throws JsonProcessingException {
  HashMap map = new HashMap();
  map.put("a", "value1");
  map.put("b", "value2");

  ObjectMapper mapper = new ObjectMapper();
  String s = mapper.writeValueAsString(map);
  System.out.println(s);
  // {"a":"value1","b":"value2"}
}

List序列化

List序列化以后,是一个 数组 的形式。

java
@Test
public void testListToJson() throws JsonProcessingException {
  List list = new ArrayList();
  list.add("value1");
  list.add("value2");

  ObjectMapper mapper = new ObjectMapper();
  String s = mapper.writeValueAsString(list);
  System.out.println(s);
  // ["value1","value2"]
}

Array序列化

Array序列化,是一个 数组 的形式。

java
@Test
public void testArrayToJson() throws JsonProcessingException {
  String[] array = {"value1", "value2", "value3"};
  
  ObjectMapper mapper = new ObjectMapper();
  String s = mapper.writeValueAsString(array);
  System.out.println(s);
  // ["value1","value2","value3"]
}

Released under the MIT License.