sitelink1 | |
---|---|
sitelink2 | |
sitelink3 | |
extra_vars4 | |
extra_vars5 | |
extra_vars6 |
`JsonNode` 객체에서 `asText()`와 `toString()` 메서드는 모두 `JsonNode`의 내용을 문자열로 반환하지만, 그 목적과 반환하는 문자열의 형태에 중요한 차이가 있습니다.
### `JsonNode.asText()`
* **목적**: `JsonNode`가 나타내는 **데이터의 실제 텍스트 값**을 추출합니다. 즉, JSON 문법상의 따옴표, 중괄호, 대괄호 등을 제외하고 순수한 값을 문자열로 반환합니다.
* **반환 값의 특징**:
* **문자열 노드 (`"value"`)**: 따옴표를 제거한 `"value"` (예: `"Hello"` -\> `"Hello"`).
* **숫자 노드 (`123`)**: 숫자를 문자열로 변환한 값 (예: `123` -\> `"123"`).
* **불리언 노드 (`true`/`false`)**: 불리언 값을 문자열로 변환한 값 (예: `true` -\> `"true"`).
* **`null` 노드 (`null`)**: 빈 문자열 (`""`)을 반환합니다. (JSON `null`은 실제 텍스트 값이 없으므로)
* **객체 노드 (`{...}`) 또는 배열 노드 (`[...]`)**: 이러한 구조화된 노드는 직접적인 텍스트 값을 가지지 않으므로, 일반적으로 \*\*빈 문자열 (`""`)\*\*을 반환합니다.
* **사용 시점**: JSON 노드가 숫자, 문자열, 불리언 등의 단일 값을 나타낼 때 그 값을 편리하게 `String` 타입으로 얻고자 할 때 사용합니다. 값이 없는 경우(`null` 노드, 객체/배열 노드)에도 예외 없이 빈 문자열을 반환하므로 안정적입니다.
### `JsonNode.toString()`
* **목적**: `JsonNode`가 나타내는 **JSON 데이터의 전체 문자열 표현**을 반환합니다. 이는 해당 노드와 그 하위 노드를 포함한 JSON 구조를 문자열화한 것입니다. `ObjectMapper`를 사용하여 JSON을 직렬화한 것과 유사한 결과를 줍니다.
* **반환 값의 특징**:
* **문자열 노드 (`"value"`)**: JSON 문법에 따라 따옴표를 포함한 문자열 (예: `"Hello"` -\> `"\"Hello\""`).
* **숫자 노드 (`123`)**: 숫자의 문자열 표현 (예: `123` -\> `"123"`).
* **불리언 노드 (`true`/`false`)**: 불리언 값의 문자열 표현 (예: `true` -\> `"true"`).
* **`null` 노드 (`null`)**: `"null"` 이라는 문자열을 반환합니다.
* **객체 노드 (`{...}`)**: 전체 객체 구조의 JSON 문자열 표현 (예: `{"name":"Alice"}` -\> `"{\"name\":\"Alice\"}"`).
* **배열 노드 (`[...]`)**: 전체 배열 구조의 JSON 문자열 표현 (예: `["A","B"]` -\> `"[\"A\",\"B\"]"`).
* **사용 시점**: `JsonNode`가 표현하는 JSON 조각(객체, 배열, 또는 값) 자체를 그대로 JSON 형식의 문자열로 얻고자 할 때 사용합니다. 디버깅 시 `JsonNode`의 전체 구조를 한눈에 보고 싶을 때 유용합니다.
### 핵심 차이 요약
| 특징 | `JsonNode.asText()` | `JsonNode.toString()` |
| :----------- | :----------------------------------------- | :----------------------------------------------- |
| **반환 내용** | 노드의 **실제 텍스트 값** (JSON 문법 제외) | 노드의 **전체 JSON 표현** (JSON 문법 포함) |
| **객체/배열 시** | 빈 문자열 (`""`) | 전체 JSON 객체/배열의 문자열 |
| **`null` 값 시** | 빈 문자열 (`""`) | `"null"` 문자열 |
| **주로 사용** | 단일 값 추출 | 노드의 JSON 구조 확인, 직렬화된 JSON 조각 얻기 |
**예시:**
```java
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
public class JsonNodeDifference {
public static void main(String[] args) throws Exception {
ObjectMapper mapper = new ObjectMapper();
// 1. 문자열 값 노드
JsonNode stringNode = mapper.readTree("\"Hello World\"");
System.out.println("String Node: ");
System.out.println(" asText(): '" + stringNode.asText() + "'"); // 'Hello World'
System.out.println(" toString(): '" + stringNode.toString() + "'"); // "\"Hello World\""
// 2. 숫자 값 노드
JsonNode numberNode = mapper.readTree("123");
System.out.println("\nNumber Node: ");
System.out.println(" asText(): '" + numberNode.asText() + "'"); // '123'
System.out.println(" toString(): '" + numberNode.toString() + "'"); // "123"
// 3. 객체 노드
JsonNode objectNode = mapper.readTree("{\"key\": \"value\", \"num\": 10}");
System.out.println("\nObject Node: ");
System.out.println(" asText(): '" + objectNode.asText() + "'"); // '' (빈 문자열)
System.out.println(" toString(): '" + objectNode.toString() + "'"); // "{\"key\":\"value\",\"num\":10}"
// 4. 배열 노드
JsonNode arrayNode = mapper.readTree("[\"item1\", \"item2\"]");
System.out.println("\nArray Node: ");
System.out.println(" asText(): '" + arrayNode.asText() + "'"); // '' (빈 문자열)
System.out.println(" toString(): '" + arrayNode.toString() + "'"); // "[\"item1\",\"item2\"]"
// 5. Null 값 노드
JsonNode nullNode = mapper.readTree("null");
System.out.println("\nNull Node: ");
System.out.println(" asText(): '" + nullNode.asText() + "'"); // '' (빈 문자열)
System.out.println(" toString(): '" + nullNode.toString() + "'"); // "null"
}
}
```
댓글 0
번호 | 제목 | 글쓴이 | 날짜 | 조회 수 |
---|---|---|---|---|
» | [ChatGPT] JsonNode 객체에서 asText()와 toString() 의 차이점 | 황제낙엽 | 2025.06.30 | 0 |
2 | [JSONObject & JsonNode] "com.fasterxml.jackson" 과 "com.googlecode.json-simple" 라이브러리에 대하여 | 황제낙엽 | 2025.02.06 | 20 |
1 | [Gemini, Jackson] JsonNode의 asText(), textValue(), toString() 함수들과 ObjectMapper.writeValueAsString() 함수 | 황제낙엽 | 2025.02.06 | 132 |