jackson 如何將實體轉(zhuǎn)json json字符串轉(zhuǎn)實體
將實體轉(zhuǎn)json json字符串轉(zhuǎn)實體
@Autowired ObjectMapper objectMapper;
實體轉(zhuǎn)json
String data = ""; //一個json串
Student stu = new Student ();
stu = objectMapper.readValue(data, Student .class);// json字符串轉(zhuǎn)實體
public <T> String writeAsString(T t) throws JsonProcessingException {
return objectMapper.writeValueAsString(t);
}
String aa = writeAsString(stu);
json轉(zhuǎn)實體
public <T> T readValue(String data) {
try {
return objectMapper.readValue(data, new TypeReference<T>() {
});
} catch (Exception e) {
// TODO: handle exception
}
return null;
}
使用Jackson操作json數(shù)據(jù),各場景實例
該篇內(nèi)容,結(jié)合實例介紹使用jackson來操作json數(shù)據(jù):
在pom.xml文件中添加 ,Jackson 依賴:
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.11.1</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.11.1</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.11.1</version>
</dependency>
示例中使用到的實體類, UserEntity.java
/**
* @Author : JCccc
* @CreateTime : 2020/3/18
* @Description :
**/
public class UserEntity {
private Integer id;
private String name;
private Integer age;
// set get 方法 和 toString 等方法就不粘貼出來了
}
在介紹示例前,先看一張圖,使用jackson如:

1. 對象(示例為 UserEntity)轉(zhuǎn) json 數(shù)據(jù)
writeValueAsString 方法
public static void main(String[] args) throws JsonProcessingException {
UserEntity userEntity=new UserEntity();
userEntity.setId(100);
userEntity.setName("JCccc");
userEntity.setAge(18);
ObjectMapper mapper = new ObjectMapper();
String jsonString = mapper.writerWithDefaultPrettyPrinter()
.writeValueAsString(userEntity);
System.out.println(jsonString);
}
控制臺輸出:

格式很漂亮,是因為使用了 :

咱們不需要漂亮,所以后面的我都不使用格式的方法了,轉(zhuǎn)換的時候,只需要 writeValueAsString 就夠了 。
2. json 數(shù)據(jù) 轉(zhuǎn) 對象
readValue 方法
ObjectMapper mapper = new ObjectMapper();
//json字符串轉(zhuǎn)對象
UserEntity userEntityNew = mapper.readValue(jsonString, UserEntity.class);
System.out.println(userEntityNew);
控制臺輸出:

3. map 轉(zhuǎn) json 數(shù)據(jù)
ObjectMapper mapper = new ObjectMapper();
Map map=new HashMap();
map.put("A",1);
map.put("B",2);
map.put("C",3);
map.put("D",4);
String jsonMap = mapper.writeValueAsString(map);
System.out.println(jsonMap);
控制臺輸出:

4. json 數(shù)據(jù) 轉(zhuǎn) map
ObjectMapper mapper = new ObjectMapper();
//json字符串轉(zhuǎn)為Map對象
Map mapNew=mapper.readValue(jsonMap, Map.class);
System.out.println(mapNew);
控制臺輸出:

5. List<UserEntity> 轉(zhuǎn) json 數(shù)據(jù)
ObjectMapper mapper = new ObjectMapper();
UserEntity userEntity1=new UserEntity();
userEntity1.setId(101);
userEntity1.setName("JCccc1");
userEntity1.setAge(18);
UserEntity userEntity2=new UserEntity();
userEntity2.setId(102);
userEntity2.setName("JCccc2");
userEntity2.setAge(18);
UserEntity userEntity3=new UserEntity();
userEntity3.setId(103);
userEntity3.setName("JCccc3");
userEntity3.setAge(18);
List<UserEntity> userList=new ArrayList<>();
userList.add(userEntity1);
userList.add(userEntity2);
userList.add(userEntity3);
String jsonList = mapper.writeValueAsString(userList);
System.out.println(jsonList);
控制臺輸出:

6. json 數(shù)據(jù) 轉(zhuǎn) List<UserEntity>
ObjectMapper mapper = new ObjectMapper();
List<UserEntity> userListNew= mapper.readValue(jsonList,new TypeReference<List<UserEntity>>(){});
System.out.println(userListNew.toString());
控制臺輸出:

7.接口接收稍微復(fù)雜一點的json數(shù)據(jù),如何拆解
現(xiàn)在模擬了一串稍微復(fù)雜一些的json數(shù)據(jù),如:
{
"msg": "success",
"data": [
{
"id": 101,
"name": "JCccc1",
"age": 18
},
{
"id": 102,
"name": "JCccc2",
"age": 18
},
{
"id": 103,
"name": "JCccc3",
"age": 18
}
],
"status": 200
}
那么我們接口接收時,如果操作呢?
1.直接使用 @RequestBody Map map 接收,里面如果嵌套list,那就拿出對應(yīng)的value轉(zhuǎn)list,然后該怎么拿怎么拿。
@PostMapping("testJackson")
public void testJackson(@RequestBody Map map) {
System.out.println(map);
String msg = String.valueOf(map.get("msg"));
System.out.println(msg);
List dataList = (List) map.get("data");
System.out.println(dataList.toString());
}
2.使用字符串接收json數(shù)據(jù) @RequestBody String jsonStr , 那么就使用jackson把這個json數(shù)據(jù)轉(zhuǎn)為Map,然后該怎么拿怎么拿。
@PostMapping("testJackson")
public void testJackson(@RequestBody String jsonStr) throws JsonProcessingException {
System.out.println(jsonStr);
ObjectMapper mapper = new ObjectMapper();
Map map = mapper.readValue(jsonStr, Map.class);
String msg = String.valueOf(map.get("msg"));
System.out.println(msg);
String status = String.valueOf(map.get("status"));
System.out.println(status);
List dataList = (List) map.get("data");
System.out.println(dataList.toString());
}
好的,該篇就到此。
ps: 為啥我要科普這個jackson的使用么?這個算是基本的操作了,原本我經(jīng)手的很多項目都用到的fastjson ,其實使用起來也杠杠的。
除了jackson是springboot web包的內(nèi)部解析框架外,其實還有一些原因。
懂的人自然會明白。
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
- Jackson使用示例-Bean、XML、Json之間相互轉(zhuǎn)換
- 一篇文章了解Jackson注解@JsonFormat及失效解決辦法
- Java中對象?和?json?互轉(zhuǎn)四種方式?json-lib、Gson、FastJson、Jackson
- 利用Jackson解決Json序列化和反序列化問題
- Java利用Jackson輕松處理JSON序列化與反序列化
- Jackson中json格式的字符串與對象的互相轉(zhuǎn)換方式
- 如何自定義Jackson序列化?@JsonSerialize
- JSON中fastjson、jackson、gson如何選擇
- 使用jackson實現(xiàn)對象json之間的相互轉(zhuǎn)換(spring boot)
- 使用Jackson-json解析一個嵌套的json字符串
- Jackson庫進(jìn)行JSON?序列化時遇到了無限遞歸(Infinite?Recursion)的問題及解決方案
相關(guān)文章
基于Hibernate中配置文件的學(xué)習(xí)(分享)
下面小編就為大家?guī)硪黄贖ibernate中配置文件的學(xué)習(xí)(分享)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-06-06
SpringBoot使用Kafka來優(yōu)化接口請求的并發(fā)方式
這篇文章主要介紹了SpringBoot使用Kafka來優(yōu)化接口請求的并發(fā)方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-07-07
關(guān)于MyBatis 查詢數(shù)據(jù)時屬性中多對一的問題(多條數(shù)據(jù)對應(yīng)一條數(shù)據(jù))
這篇文章主要介紹了MyBatis 查詢數(shù)據(jù)時屬性中多對一的問題(多條數(shù)據(jù)對應(yīng)一條數(shù)據(jù)),本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-01-01
SpringCloud中的openFeign調(diào)用服務(wù)并傳參的過程
服務(wù)和服務(wù)之間通信,不僅僅是調(diào)用,往往在調(diào)用過程中還伴隨著參數(shù)傳遞,接下來重點來看看OpenFeign在調(diào)用服務(wù)時如何傳遞參數(shù),感興趣的朋友一起看看吧2023-11-11
解析SpringBoot整合SpringDataRedis的過程
這篇文章主要介紹了SpringBoot整合SpringDataRedis的過程,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-06-06
IDEA創(chuàng)建springboot + mybatis項目全過程(步驟詳解)
這篇文章主要介紹了IDEA創(chuàng)建springboot + mybatis項目全過程及步驟詳解,本文通圖文實例代碼相結(jié)合給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-07-07

