Jackson快速入门
引言
上一篇博客《XML模板解析————Dom4j解析xml案例分析》簡單講解了關(guān)于xml模板的解析,使用到了dom4j,這篇文章其實算是個姊妹篇,都是對于目前工作中的一些任務(wù),如xml、json相互解析所涉及到的知識。
但是相對于xml而言,我更希望通過這篇博客能夠稍微全面的學(xué)習(xí)一下jackson。因為之前用過的相關(guān)類庫是國產(chǎn)的fastjson,雖然簡單的操作還可以,但是最近發(fā)現(xiàn)遠(yuǎn)比jackson的功能還是差遠(yuǎn)了。雖然fastjson在性能方面上較為優(yōu)秀,但是jackson本身非常穩(wěn)定,并且功能相當(dāng)齊全,歷史也較為久遠(yuǎn),而且jackson也是Spring Boot對于json解析的默認(rèn)推薦。如果你的項目是Spring Boot,不需要引入任何的額外配置即可完成對json的處理操作,真是又強大,又好用。
一、ObjectMapper類
ObjectMapper類是Jackson庫的主要類。它提供了一些功能將Java對象匹配JSON結(jié)構(gòu),反之亦然。它使用JsonParser和JsonGenerator的實例實現(xiàn)JSON實際的讀/寫。
ObjectMapper是可以反復(fù)使用的對象。
二、JSON字符串轉(zhuǎn)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);}執(zhí)行結(jié)果:
com.group.coursesystem.util.JsonTest$Student@167fdd33 {"name":"Tom","age":25}三、對象序列化
對象序列化指的是將POJO對象保存到文件中,文件以".json"結(jié)尾,并且要能夠從json文件中讀出對象。
將對象序列化到j(luò)son文件中:
@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);}執(zhí)行結(jié)果:
將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);}執(zhí)行結(jié)果:
[name = Milly, age = 23]四、數(shù)據(jù)綁定
Jackson數(shù)據(jù)綁定分為簡單數(shù)據(jù)綁定和完全數(shù)據(jù)綁定。
4.1 簡單數(shù)據(jù)綁定
簡單數(shù)據(jù)綁定是指JSON映射到Java核心數(shù)據(jù)類型,如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"));}執(zhí)行結(jié)果:
dataMap.json文件內(nèi)容(原始形式為排列成一行,下圖為原數(shù)據(jù)手動格式化后的結(jié)果):
控制臺輸出:
4.2 完全數(shù)據(jù)綁定
完全數(shù)據(jù)綁定指JSON映射到任何Java對象。
參考二、三節(jié)。
總結(jié)
以上是生活随笔為你收集整理的Jackson快速入门的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 一篇博客读懂设计模式之---动态代理与反
- 下一篇: FFmpeg在Ubuntu的安装以及教程