序列化和反序列化
在 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"]
}