Computer >> 컴퓨터 >  >> 프로그래밍 >> Java

Java 스트리밍 API로 JSON 문자열 파싱하는 방법 완벽 가이드

Java에서 JSON 데이터를 효율적으로 처리하려면 스트리밍 API(Streaming API)를 활용하는 것이 좋습니다. 스트리밍 API의 핵심은 JsonParser 인터페이스로, 이 인터페이스는 JSON 데이터를 스트리밍 방식으로 순차적으로 파싱할 수 있는 다양한 메서드를 제공합니다.

스트리밍 API의 특징

JsonParser는 다음과 같은 특징을 가지고 있습니다.

  • 순방향(Forward) 접근: 데이터를 처음부터 끝까지 한 방향으로만 읽을 수 있습니다.
  • 읽기 전용(Read-only): JSON 데이터를 수정할 수 없으며 읽기만 가능합니다.
  • 메모리 효율성: 전체 문서를 메모리에 로드하지 않으므로 대용량 JSON 처리에 적합합니다.

createParser() 메서드 문법

Json 클래스는 입력 소스로부터 파서를 생성하는 메서드들을 포함하고 있으며, 정적(static) 메서드인 createParser()를 사용하여 JSON을 파싱할 수 있습니다.

public static JsonParser createParser(Reader reader)

실전 예제 코드

아래 예제는 JSON 문자열을 스트리밍 방식으로 파싱하여 각 키와 값을 출력하는 코드입니다.

import java.io.*;
import javax.json.Json;
import javax.json.stream.JsonParser;
import javax.json.stream.JsonParser.Event;

public class JSONParseringTest {
    public static void main(String[] args) {
        String jsonString = "{\"name\":\"Adithya\",\"employeeId\":\"115\",\"age\":\"30\"}";
        JsonParser parser = Json.createParser(new StringReader(jsonString));
        while(parser.hasNext()) {
            Event event = parser.next();
            if(event == Event.KEY_NAME) {
                switch(parser.getString()) {
                    case "name":
                        parser.next();
                        System.out.println("Name: " + parser.getString());
                        break;
                    case "employeeId":
                        parser.next();
                        System.out.println("EmployeeId: " + parser.getString());
                        break;
                    case "age":
                        parser.next();
                        System.out.println("Age: " + parser.getString());
                        break;
                }
            }
        }
    }
}

실행 결과

Name: Adithya
EmployeeId: 115
Age: 30

코드 동작 원리

위 예제의 핵심 로직을 단계별로 살펴보면 다음과 같습니다.

  1. 파서 생성: Json.createParser()StringReader를 전달하여 JSON 문자열 기반의 파서를 생성합니다.
  2. 이벤트 반복: hasNext()next()를 사용해 파서가 다음 이벤트로 이동하며 JSON 구조를 순회합니다.
  3. 키 이름 확인: 이벤트 타입이 Event.KEY_NAME일 때 getString()으로 현재 키 이름을 가져옵니다.
  4. 값 추출: 키 이름에 따라 parser.next()로 값 이벤트로 이동한 후 해당 값을 출력합니다.

이처럼 스트리밍 API는 이벤트 기반으로 JSON을 처리하기 때문에 DOM 방식보다 메모리 사용량이 적고, 대용량 데이터나 실시간 데이터 스트림을 처리할 때 특히 유용합니다.