JSONTokener란 무엇인가?
Java에서 JSONTokener 클래스는 하나의 문자열을 여러 개의 토큰(token)으로 분리하여 처리할 수 있도록 지원하는 유틸리티 클래스입니다. 내부적으로 JSONObject와 JSONArray 생성자가 JSON 소스 문자열을 파싱할 때 이 클래스를 활용합니다.
JSONTokener는 커서(cursor) 기반으로 동작하며, 문자열을 한 글자씩 읽어 들이면서 현재 위치를 앞뒤로 자유롭게 이동시킬 수 있습니다. 덕분에 복잡한 JSON 구조를 세밀하게 제어하며 파싱해야 하는 상황에서 매우 유용합니다.
JSONTokener의 주요 메서드
- back(): 커서를 한 칸 뒤로 이동시킵니다.
- more(): 아직 읽을 토큰(문자)이 남아 있으면 true, 더 이상 없으면 false를 반환합니다.
- next(): 현재 위치 바로 다음의 문자를 반환하고 커서를 앞으로 이동시킵니다.
- nextTo(character): 지정한 문자를 만날 때까지의 문자열을 반환합니다.
구문(Syntax)
public class JSONTokener extends java.lang.Object예제 코드
import java.io.*;
import org.json.*;
public class JSONTokenerTest {
public static void main(String args[]) throws JSONException, Exception {
String jsonStr = "{" + " \"Technology\": \"Java\", "+ " \"location\": [ Madhapur, Hyderabad ] " + "}";
JSONTokener jsonToken = new JSONTokener(jsonStr);
jsonToken.next();
jsonToken.next();
jsonToken.next();
jsonToken.next();
char c = jsonToken.next();
jsonToken.back();
boolean b = jsonToken.more();
String s = jsonToken.nextTo('i');
System.out.println("next character: " + c);
System.out.println("has more tokens: " + b);
System.out.println("next to i: " + s);
}
}코드 설명
위 예제에서는 먼저 네 번의 next() 호출을 통해 문자열 시작 부분의 '{', 공백, 따옴표 등을 건너뜁니다. 그다음 다섯 번째 next() 호출로 'T' 문자를 얻습니다. 이후 back()으로 커서를 한 칸 되돌린 뒤, more()를 호출해 남아 있는 토큰이 있는지 확인하고, 마지막으로 nextTo('i')를 통해 'i' 문자를 만나기 전까지의 전체 문자열을 추출합니다.
실행 결과
next character: T
has more tokens: true
next to i: Technology": "Java", "locat이처럼 JSONTokener를 활용하면 JSON 문자열을 문자 단위로 정밀하게 탐색하고 조작할 수 있어, 직접 파서를 구현하거나 특정 위치의 데이터를 추출해야 할 때 큰 도움이 됩니다.