1、常用转换工具
- Jackson:由 FasterXML 公司开发的,使用最广泛,适用于数据量大的转换。
- FastJson:由阿里巴巴开发的,适用于数据量大的转换。
- Gson:是 Google 开发的,简单易用,适合快速开发,广泛应用在Android开发中。
2、准备Java对象
public class Person {
private String name;
private int age;
// 构造函数、getter和setter方法省略
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
3、Jackson
通过ObjectMapper对象来完成Java对象和JSON的相互转换。
3.1、引入依赖
<dependencies>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.12.3</version> <!-- 使用当前版本或更高版本 -->
</dependency>
</dependencies>
3.2、Java对象转JSON
使用 writeValueAsString(person) 方法将Java对象转为JSON
- 参数person:需要转为JSON的Java对象
import com.fasterxml.jackson.databind.ObjectMapper;
public class JavaToJsonExample {
public static void main(String[] args) throws Exception {
// 创建一个Person对象
Person person = new Person("John", 30);
// 创建ObjectMapper对象
ObjectMapper objectMapper = new ObjectMapper();
// 将Java对象转为JSON字符串
String json = objectMapper.writeValueAsString(person);
// 打印JSON字符串
System.out.println(json);
}
}
3.3、JSON转为Java对象
使用 readValue(json,Person.class) 方法将JSON转为Java对象
- 参数json:需要转为Java对象的JSON字符串
- 参数Person.class:转化的目标对象的类型
import com.fasterxml.jackson.databind.ObjectMapper;
public class JsonToJavaExample {
public static void main(String[] args) throws Exception {
// JSON字符串
String json = "{\"name\":\"Alice\",\"age\":25}";
// 创建ObjectMapper对象
ObjectMapper objectMapper = new ObjectMapper();
// 将JSON字符串转为Java对象
Person person = objectMapper.readValue(json, Person.class);
// 打印Java对象
System.out.println(person);
}
}
3.4、JSON转为List集合对象
在 readValue(json,typeRef) 方法中,第二个参数需要使用TyprReference对象来获取泛型参数类型。不能使用List<Person>.class,否则无法将JSON字符串正确解析为List<Person>对象,因为Java的类型擦除机制,在运行时泛型信息会被擦除,所以List<Person>.class
实际上只是List.class
,无法包含具体的泛型类型信息。因此,需要使用TypeReference来捕获泛型的类型信息
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.core.type.TypeReference;
public class JsonToJavaExample {
public static void main(String[] args) throws Exception {
Person person1 = new Person("John", 30);
Person person2 = new Person("Tom", 30);
TypeReference<List<Person>> typeRef = new TypeReference<List<Person>>();
List<Person> myList = new ArrayList<Person>();
myList.add(person1);
myList.add(person2);
String json = new ObjectMapper().writeValueAsString(myList);
List<String> deserializedList = new ObjectMapper().readValue(json, typeRef);
}
}
4、FastJson
通过FastJson提供的JSON对象来完成Java对象和JSON的相互转换。
4.1、引入依赖
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.78</version> <!-- 使用当前版本或更高版本 -->
</dependency>
4.2、Java对象转换为JSON
使用Fastjson的 toJSONString()
静态
方法将Person对象转换为JSON字符串
public class JavaToJsonExample {
public static void main(String[] args) throws Exception {
Person person = new Person("John",30);
String json = JSON.toJSONString(person);
System.out.println(json); // {"name":"John","age":30}
}
}
4.3、JSON字符串转换为Java对象
使用Fastjson的 parseObject()
方法将其转换为Person对象
public class JavaToJsonExample {
public static void main(String[] args) throws Exception {
String json = "{\"name\":\"John\",\"age\":30}";
Person person = JSON.parseObject(json, Person.class);
System.out.println(person.getName()); // John
System.out.println(person.getAge()); // 30
}
}
4.4、将JSON字符串转为List
使用 parseArray
方法
List<Person> personList = JSON.parseArray(json, Person.class);
5、Gson
通过Gson对象来完成Java对象和JSON的相互转换。
5.1、引入依赖
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.9</version> <!-- 使用当前版本或更高版本 -->
</dependency>
5.2、将Java对象转换成JSON字符串或将JSON字符串转换成Java对象
public class JavaToJsonExample {
public static void main(String[] args) throws Exception {
// 创建一个Person对象
Person person = new Person("John", 30);
// 创建Gson对象
Gson gson = new Gson();
// 将Java对象转换成JSON字符串
String jsonString = gson.toJson(person);
// 将JSON字符串转换成Java对象
JavaObject javaObject = gson.fromJson(jsonString, JavaObject.class);
}
}