背景: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);