使用 Jackson – 將字串轉換為 JsonNode 物件
概述
本快速指南的主要目的是如何使用 Jackson 2 來將一個字串轉換為 JsonNode 物件。
JsonNode 定義在 com.fasterxml.jackson.databind.JsonNode 包中。
快速轉換
可以使用下面的程式碼直接進行轉換。
轉換的方式也比較簡單,在定義好 ObjectMapper 物件後,直接使用這個物件的 readTree 方法將輸入的字串轉換為 JsonNode 物件。
考察下面的程式碼:
@Test
public void whenParsingJsonStringIntoJsonNode_thenCorrect()
throws JsonParseException, IOException {
String jsonString = "{"k1":"v1","k2":"v2"}";
ObjectMapper mapper = new ObjectMapper();
JsonNode actualObj = mapper.readTree(jsonString);
assertNotNull(actualObj);
}
低級別的轉換
在有些情況下,你可能需要使用更加低級別的轉換,比如說在轉換的時候需要對一些輸出引數進行設定。
那麼你就需要先配置 Parser 了。
與前面的快速轉換不同的是,在你 new 了一個新的 ObjectMapper 物件後,你需要從這個物件中獲得 Factory。
然後再建立一個 Parser,最後再呼叫 readTree 的方法。
請考察下面的程式碼:
@Test
public void givenUsingLowLevelApi_whenParsingJsonStringIntoJsonNode_thenCorrect()
throws JsonParseException, IOException {
String jsonString = "{"k1":"v1","k2":"v2"}";
ObjectMapper mapper = new ObjectMapper();
JsonFactory factory = mapper.getFactory();
JsonParser parser = factory.createParser(jsonString);
JsonNode actualObj = mapper.readTree(parser);
assertNotNull(actualObj);
}
JsonNode 的使用
當 JSON 字串被處理成了 JsonNode 物件後,那我們可以使用 JSON Tree Model 來對轉換後的 JSON 物件進行操作。
例如下面的程式碼,首先我們完成了字串到 JSON 物件的轉換,然後轉換完成後,我們通過 K1 的對定義來獲得值。
@Test
public void givenTheJsonNode_whenRetrievingDataFromId_thenCorrect()
throws JsonParseException, IOException {
String jsonString = "{"k1":"v1","k2":"v2"}";
ObjectMapper mapper = new ObjectMapper();
JsonNode actualObj = mapper.readTree(jsonString);
// When
JsonNode jsonNode1 = actualObj.get("k1");
assertThat(jsonNode1.textValue(), equalTo("v1"));
}
結論
在使用 fasterxml 的 jackson 包對 Json 資料操作之前,首先需要做的事情就是將輸入的 String 或者檔案或者不同的輸入流轉換為 JsonNode 物件。
後續的操作就是對 JsonNode 的物件進行操作了。
例如,上面我們的一個 JsonNode 物件是一個數組,那麼我們可以對上面的陣列中轉換後的物件進行遍歷。
「其他文章」
- 到底應不應該使用 lombok
- Java 8 開始新增的 Optional 類 - Optional 物件中的返回
- Fedora 上如何安裝 gitea
- Ubuntu 安裝 NTP 服務
- 群暉(Synology)NAS 安裝 Mariadb 資料庫啟動錯誤
- 美東某 IoT 公司技術流程第一輪溝通就掛了
- Node 的 cross-env 模組
- Npm 安裝提示 EUNSUPPORTEDPROTOCOL 錯誤
- 使用 Jackson – 將字串轉換為 JsonNode 物件
- 在 Discourse 中如何使用輸入對話方塊
- IntelliJ IDEA 中如何將 POM 中的版本號快速提出為屬性
- RedHat 8 時間同步和時區修改
- JDK 8 及其後續 JDK 中 Period 和 Duration
- POM 檔案中 licenses 許可證的定義
- IntelliJ IDEA 如何顯示提交輸入的資訊歷史
- 前端工程師的 caniuse
- JavaScript 陣列進行拼接的函式
- JavaScript 陣列元素的一些操作
- 如何理解 Java 多執行緒
- JavaScript 中 Array map() 方法