java对象和json的相互转换--(2) 使用Jackson 进行简单的java对象json序列化和反序列化
https://blog.csdn.net/wslyk606/article/details/80301782
背景:json格式是现在java开发中使用很多的一种字符串格式,现在开发中一般都是前后端隔离的,通常后端需要以约定的格式传送之给前端数据,而json就是常用的一种。现在对常用的几种java对象和json的相互转化做一个总结,方便以后的工作学习。
前写的一篇其实也是使用jackson来进行的java对象的序列化,只是采用了注解的方式,这篇文章开始,会对几种常用的方式做一个详细的记录。
一 使用Jackson进行简单的java对象和json字符串的相互转化
Jackson的maven依赖:
<dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.9.5</version> </dependency>
首先我们定义一个Student类,
public class Student {
private String name;
private int age;
private String[] hobbies;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String[] getHobbies() {
return hobbies;
}
public void setHobbies(String[] hobbies) {
this.hobbies = hobbies;
}
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
", hobbies=" + Arrays.toString(hobbies) +
'}';
}
}
下面写一个简单的Student类转换为json字符串的demo
package json;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class JsonTest {
private static final Logger logger = LoggerFactory.getLogger(JsonTest.class);
public static void main(String[] args) {
// 第一步,创建一个ObjectMapper类,这个类是Jackson中的主要类,可以重复使用,
// 用来进行json序列化和反序列化
ObjectMapper mapper = new ObjectMapper();
Student student = new Student();
String[] hobbies = {"music", "football", "basketball"};l
student.setName("Jack");
student.setAge(25);
student.setHobbies(hobbies);
try {
// 第二步,通过ObjectMapper的writeValueAsString()方法来将Student对象转换成json字符串
String jsonString = mapper.writeValueAsString(student);
System.out.println(jsonString);
} catch (JsonProcessingException e) {
logger.error(String.format("Error reason: %s", e));
}
}
}
测试结果为
{"name":"Jack","age":25,"hobbies":["music","football","basketball"]}
反之,json字符串转换成对应的java对象也是一样,
package json;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.IOException;
import java.util.Arrays;
public class JsonTest {
private static final Logger logger = LoggerFactory.getLogger(JsonTest.class);
public static void main(String[] args) {
// 第一步,创建一个ObjectMapper类,这个类是Jackson中的主要类,可以重复使用,
// 用来进行json序列化和反序列化
ObjectMapper mapper = new ObjectMapper();
String jsonString = "{\"name\":\"Jack\",\"age\":25,\"hobbies\":[\"music\",\"football\",\"basketball\"]}";
try {
// 第二步,通过ObjectMapper的readValue()方法来将json字符串转换成Student对象
Student student = mapper.readValue(jsonString, Student.class);
System.out.println("name : " + student.getName());
System.out.println("age : " + student.getAge());
System.out.println("hobbies : " + Arrays.toString(student.getHobbies()));
} catch (IOException e) {
logger.error(String.format("Error reason: %s", e));
}
}
}
测试结果为
name : Jack
age : 25
hobbies : [music, football, basketball]
小结: 主要采用Jackson的ObjectMapper类来进行java对象和json字符串的转换,
java对象序列化使用的是writeValueAsString方法:
将Student类格式化为json字符串
jsonString = mapper.writeValueAsString(student);
反序列化使用的是readValue方法:
读取java对象格式的json并转换成Student类
Student student = mapper.readValue(jsonString, Student.class);
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)