1. 程式人生 > >4. JSON字串是如何被解析的?JsonParser瞭解一下

4. JSON字串是如何被解析的?JsonParser瞭解一下

> 公司不是你家,領導不是你媽。本文已被 [**https://www.yourbatman.cn**](https://www.yourbatman.cn) 收錄,裡面一併有Spring技術棧、MyBatis、JVM、中介軟體等小而美的**專欄**供以免費學習。關注公眾號【**BAT的烏托邦**】逐個擊破,深入掌握,拒絕淺嘗輒止。 [TOC] ![](https://img-blog.csdnimg.cn/20200725140936285.png) # 前言 各位好,我是A哥(YourBatman)。上篇文章:[3. 懂了這些,方敢在簡歷上說會用Jackson寫JSON](https://mp.weixin.qq.com/s/ZHb3P06IC4xElHwJqDepxw) 聊完,**流式API**的寫部分可以認為你已完全掌握了,本文了解它讀的部分。 ![](https://img-blog.csdnimg.cn/20200723180943213.png) ## 版本約定 - Jackson版本:`2.11.0` - Spring Framework版本:`5.2.6.RELEASE` - Spring Boot版本:`2.3.0.RELEASE` > 小貼士:截止到本文,本系列**前面**所有示例都只僅僅匯入`jackson-core`而已,後續若要新增jar包我會額外說明,否則相同 # 正文 什麼叫讀JSON?就是把一個JSON **字串** 解析為物件or樹模型嘛,因此也稱作解析JSON串。Jackson底層流式API使用`JsonParser`來完成**JSON字串**的解析。 ## 最簡使用Demo 準備一個POJO: ```java @Data public class Person { private String name; private Integer age; } ``` 測試用例:把一個JSON字串繫結(封裝)進一個POJO物件裡 ```java @Test public void test1() throws IOException { String jsonStr = "{\"name\":\"YourBatman\",\"age\":18}"; Person person = new Person(); JsonFactory factory = new JsonFactory(); try (JsonParser jsonParser = factory.createParser(jsonStr)) { // 只要還沒結束"}",就一直讀 while (jsonParser.nextToken() != JsonToken.END_OBJECT) { String fieldname = jsonParser.getCurrentName(); if ("name".equals(fieldname)) { jsonParser.nextToken(); person.setName(jsonParser.getText()); } else if ("age".equals(fieldname)) { jsonParser.nextToken(); person.setAge(jsonParser.getIntValue()); } } System.out.println(person); } } ``` 執行程式,輸出: ```java Person(name=YourBatman, age=18) ``` 成功把一個JSON字串的值解析到Person物件。你可能會疑問,怎麼這麼麻煩?那當然,這是底層流式API,純**手動檔**嘛。你獲得了效能,可不要失去一些便捷性嘛。 > 小貼士:底層流式API一般面向“專業人士”,應用級開發使用高階API `ObjectMapper`即可。當然,讀完本系列就能讓你完全具備“專業人士”的實力