javax.json 패키지는 JSON을 처리하기 위한 Object Model API(객체 모델 API)를 제공합니다. Object Model API는 JSON 객체 및 배열 구조에 대해 불변(immutable) 객체 모델을 제공하는 고수준 API입니다. 이러한 JSON 구조는 JsonObject와 JsonArray 인터페이스를 사용하여 객체 모델로 표현할 수 있습니다.
또한 JsonGenerator 인터페이스를 활용하면 스트리밍 방식으로 출력 대상에 JSON 데이터를 작성할 수 있습니다. 특히 JsonGenerator.PRETTY_PRINTING은 JSON을 보기 좋게 정렬된 형태(예쁘게 인쇄)로 생성하기 위한 설정 속성입니다.
아래 예제를 통해 JSON을 예쁘게 출력하는 방법을 살펴보겠습니다.
예제 코드
import java.io.*;
import java.util.*;
import javax.json.*;
import javax.json.stream.*;
public class JSONPrettyPrintTest {
public static void main(String args[]) {
String jsonString = "{\"name\":\"Raja Ramesh\",\"age\":\"35\",\"salary\":\"40000\"}";
StringWriter sw = new StringWriter();
try {
JsonReader jsonReader = Json.createReader(new StringReader(jsonString));
JsonObject jsonObj = jsonReader.readObject();
Map<String, Object> map = new HashMap<>();
map.put(JsonGenerator.PRETTY_PRINTING, true);
JsonWriterFactory writerFactory = Json.createWriterFactory(map);
JsonWriter jsonWriter = writerFactory.createWriter(sw);
jsonWriter.writeObject(jsonObj);
jsonWriter.close();
} catch(Exception e) {
e.printStackTrace();
}
String prettyPrint = sw.toString();
System.out.println(prettyPrint); // 예쁘게 출력된 JSON
}
}실행 결과
{
"name": "Raja Ramesh",
"age": "35",
"salary": "40000"
}위 코드의 핵심 흐름은 다음과 같습니다. 먼저 Json.createReader()로 문자열 형태의 JSON을 읽어 JsonObject로 변환합니다. 그다음 PRETTY_PRINTING 속성을 true로 설정한 맵을 Json.createWriterFactory()에 전달하여 JSON 작성기 팩토리를 생성합니다. 이렇게 만든 JsonWriter로 객체를 출력하면 들여쓰기가 적용된 가독성 높은 JSON 문자열을 얻을 수 있습니다.