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.接口接收稍微復雜一點的json數(shù)據(jù),如何拆解
現(xiàn)在模擬了一串稍微復雜一些的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庫進行JSON?序列化時遇到了無限遞歸(Infinite?Recursion)的問題及解決方案
相關(guān)文章
SpringBoot項目如何把接口參數(shù)中的空白值替換為null值(推薦)
這篇文章主要介紹了SpringBoot項目如何把接口參數(shù)中的空白值替換為null值(推薦),本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-01-01從源碼角度簡單看StringBuilder和StringBuffer的異同(全面解析)
下面小編就為大家分享一篇從源碼角度簡單看StringBuilder和StringBuffer的異同(全面解析),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2017-12-12