Jackson快速入门
引言
上一篇博客《XML模板解析————Dom4j解析xml案例分析》簡單講解了關于xml模板的解析,使用到了dom4j,這篇文章其實算是個姊妹篇,都是對于目前工作中的一些任務,如xml、json相互解析所涉及到的知識。
但是相對于xml而言,我更希望通過這篇博客能夠稍微全面的學習一下jackson。因為之前用過的相關類庫是國產的fastjson,雖然簡單的操作還可以,但是最近發現遠比jackson的功能還是差遠了。雖然fastjson在性能方面上較為優秀,但是jackson本身非常穩定,并且功能相當齊全,歷史也較為久遠,而且jackson也是Spring Boot對于json解析的默認推薦。如果你的項目是Spring Boot,不需要引入任何的額外配置即可完成對json的處理操作,真是又強大,又好用。
一、ObjectMapper類
ObjectMapper類是Jackson庫的主要類。它提供了一些功能將Java對象匹配JSON結構,反之亦然。它使用JsonParser和JsonGenerator的實例實現JSON實際的讀/寫。
ObjectMapper是可以反復使用的對象。
二、JSON字符串轉POJO對象
@Testpublic void jsonStrToJavaBean() throws JsonParseException, JsonMappingException, IOException {String stuJsonStr = "{\"name\" : \"Tom\", \"age\" : 25}";ObjectMapper mapper = new ObjectMapper();Student stu = mapper.readValue(stuJsonStr, Student.class);System.out.println(stu);String stuStr = mapper.writeValueAsString(stu);System.out.println(stuStr);}執行結果:
com.group.coursesystem.util.JsonTest$Student@167fdd33 {"name":"Tom","age":25}三、對象序列化
對象序列化指的是將POJO對象保存到文件中,文件以".json"結尾,并且要能夠從json文件中讀出對象。
將對象序列化到json文件中:
@Testpublic void convertBeanAndJsonFile() throws JsonGenerationException, JsonMappingException, IOException {ObjectMapper mapper = new ObjectMapper();Student stu = new Student("Milly", 23);mapper.writeValue(new File(stu.getName() + ".json"), stu);}執行結果:
將json文件讀出到Bean中:
@Testpublic void jsonFileToBean() throws JsonParseException, JsonMappingException, IOException {ObjectMapper mapper = new ObjectMapper();Student stu = mapper.readValue(new File("Milly.json"), Student.class);System.out.println(stu);}執行結果:
[name = Milly, age = 23]四、數據綁定
Jackson數據綁定分為簡單數據綁定和完全數據綁定。
4.1 簡單數據綁定
簡單數據綁定是指JSON映射到Java核心數據類型,如String 、Map、List等。
| JSON類型 | Java類型 |
| object | LinkedHashMap<String,Object> |
| array | ArrayList<Object> |
| string | String |
| complete number | Integer, Long or BigInteger |
| fractional number | Double / BigDecimal |
| true | false | Boolean |
| null | null |
示例代碼:
@Testpublic void simpleDataBind() throws JsonGenerationException, JsonMappingException, IOException {ObjectMapper mapper = new ObjectMapper();boolean isStudent = true;int[] nums = {1, 3, 5, 7, 9};Student Jerry = new Student("Jerry", 26);Map<String, Student> stuMap = new HashMap<>();stuMap.put("studentObj", Jerry);Map<String, Object> dataMap = new HashMap<>();dataMap.put("studentName", Jerry.getName());dataMap.put("studentAge", Jerry.getAge());dataMap.put("Jerry", Jerry);dataMap.put("stuMap", stuMap);dataMap.put("nums", nums);dataMap.put("isStudent", isStudent);// -----------------序列化為json文件------------------mapper.writeValue(new File("dataMap.json"), dataMap);// -------------------從json文件中讀出各個對象----------------Map<String, Object> readDataMap = mapper.readValue(new File("dataMap.json"), Map.class);System.out.println(readDataMap);System.out.println(readDataMap.get("Jerry"));System.out.println(readDataMap.get("stuMap"));System.out.println(readDataMap.get("nums"));System.out.println(readDataMap.get("isStudent"));}執行結果:
dataMap.json文件內容(原始形式為排列成一行,下圖為原數據手動格式化后的結果):
控制臺輸出:
4.2 完全數據綁定
完全數據綁定指JSON映射到任何Java對象。
參考二、三節。
總結
以上是生活随笔為你收集整理的Jackson快速入门的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 一篇博客读懂设计模式之---动态代理与反
- 下一篇: 将单向链表按某值划分成左边小、 中间相等