知識庫 / JSON / Jackson RSS 訂閱

JSONNode中的asText()與toString()區別

Jackson
HongKong
6
09:47 PM · Dec 05 ,2025

1. 概述

本教程將探討 Jackson 的 <em>JsonNode</em> 類中 <em>asText()</em><em>toString()</em> 方法之間的差異。

<em>JsonNode</em> 類允許解析和操作 JSON 數據。當與字符串數據交互時,<em>JsonNode</em> 類中常用的兩種方法是 <em>asText()</em><em>toString()</em>。 乍一看,它們可能看起來相似,但它們之間存在重要的差異。

2. 依賴項

首先,我們將jackson-databind依賴項添加到 pom.xml

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.14.1</version>
</dependency>

3. 使用 asText()

在本文中,我們將使用 Jackson 的 ObjectMapper 對象和 Jackson 的 JsonNode 對象。

asText() 方法返回 JsonNode 的文本值作為 String,但其工作方式取決於 JsonNode 的類型:

  • 對於 TextNode,它將返回節點的文本值
  • 對於數值節點,它將返回節點的數值值作為 String
  • 對於 BooleanNode 節點,它將返回 truefalse
  • 對於 ArrayNodeObjectNode 節點,它將返回一個空 String

asText() 的概念是返回節點的價值,而無需進行任何操作。由於 asText()JsonNode 的抽象方法,所有節點都有一個實現,其中每個節點都返回其自身的價值。

如果無法在不操作節點的情況下返回一個值(例如,由於子節點),它將返回一個空 String

String json = "{\"name\":\"John\",\"age\":30}";
JsonNode node = new ObjectMapper().readTree(json);

String name = node.get("name").asText();
assertThat(name).isEqualTo("John");

String age = node.get("age").asText();
assertThat(age).isEqualTo("30");

String jsonText = node.asText();
assertThat(jsonText).isEmpty();

4. 使用 toString() 方法

`toString() 方法是從 Object 類中繼承的,並返回 JsonNode 數據的一個 String 字符串表示形式。這意味着,如果執行此操作,它將返回 JSON 的文本表示形式(包括子節點,如 ObjectNodeArrayNode 中),並帶有引號和轉義字符。

此方法可用於調試或生成可寫入文件、API 等的 JSON 文本。

asText() 方法不同,如果我們在 TextNode 上應用 toString(), 它將返回帶有引號和轉義字符的字符串:

String json = "{\"name\":\"John\",\"age\":30}";
JsonNode node = new ObjectMapper().readTree(json);

String jsonString = node.toString();
assertThat(jsonString).isEqualTo("{\"name\":\"John\",\"age\":30}");

String name = node.get("name").toString();
assertThat(name).isEqualTo("\"John\"");

String age = node.get("age").toString();
assertThat(age).isEqualTo("30");

5. 特殊字符

需要考慮的另一個方面是如何處理特殊字符和 Unicode 字符。<em>asText()</em> 會自動轉義文本中的特殊字符,例如雙引號和反斜槓,以確保生成的 <em>String</em> 是有效的 JSON。

以下是一個演示 <em>asText()</em> 正確地轉義文本中雙引號的示例,而 <em>toString()</em> 不會自動轉義特殊字符。如果我們的 JSON 數據中包含特殊字符,使用 <em>toString()</em> 可能會導致無法正確解析的無效 JSON 文本:

String specialCharsJson = "{\"text\":\"Hello \\\"world\\\" !\"}";
JsonNode specialCharsNode = new ObjectMapper().readTree(specialCharsJson);
    
String specialCharsJsonAsText = specialCharsNode.get("text").asText();
assertThat(specialCharsJsonAsText).isEqualTo("Hello \"world\" !");

String specialCharsJsonToString = specialCharsNode.get("text").toString();
assertThat(specialCharsJsonToString).isEqualTo("\"Hello \\\"world\\\" !\"");

6. 結論

在本文中,我們討論了 asText()toString() 方法,用於在 Java 中處理 JSON 數據。

user avatar
0 位用戶收藏了這個故事!
收藏

發佈 評論

Some HTML is okay.