JsonGenerator는 JSON 콘텐츠를 작성하기 위한 공개 API를 정의하는 기반 클래스입니다. 이 클래스의 인스턴스는 JsonFactory 객체의 팩토리 메서드를 통해 생성할 수 있습니다. 팩토리 인스턴스로부터 JsonGenerator를 얻은 후에는 다음과 같은 주요 메서드들을 사용해 JSON을 작성합니다.
- writeStartObject() : JSON 객체 값의 시작 마커를 작성합니다.
- writeFieldName() : 필드 이름을 작성합니다.
- writeString() : 문자열 값을 출력합니다.
- writeStartArray() : 배열 값의 시작 마커를 작성합니다.
- writeEndObject() : JSON 객체 값의 닫는 마커를 작성합니다.
문법
public abstract class JsonGenerator extends Object implements Closeable, Flushable, Versioned
예제
아래 예제에서는 JsonFactory로부터 JsonGenerator를 생성한 뒤, 직원 정보를 담은 JSON 객체를 작성하고 콘솔에 출력합니다. useDefaultPrettyPrinter() 메서드를 호출하면 들여쓰기가 적용된 보기 좋은 형태의 JSON이 출력됩니다.
import java.io.*;
import com.fasterxml.jackson.core.*;
public class JsonGeneratorTest {
public static void main(String args[]) throws IOException {
JsonFactory factory = new JsonFactory();
StringWriter jsonObjectWriter = new StringWriter();
JsonGenerator generator = factory.createGenerator(jsonObjectWriter);
generator.useDefaultPrettyPrinter(); // JSON 예쁘게 출력
generator.writeStartObject();
generator.writeFieldName("empid");
generator.writeString("120");
generator.writeFieldName("firstName");
generator.writeString("Ravi");
generator.writeFieldName("lastName");
generator.writeString("Chandra");
generator.writeFieldName("technologies");
generator.writeStartArray();
generator.writeString("SAP");
generator.writeString("Java");
generator.writeString("Selenium");
generator.writeEndArray();
generator.writeEndObject();
generator.close(); // 제너레이터 종료
System.out.println(jsonObjectWriter.toString());
}
}실행 결과
{
"empid" : "120",
"firstName" : "Ravi",
"lastName" : "Chandra",
"technologies" : [ "SAP", "Java", "Selenium" ]
}위 코드에서 볼 수 있듯이, JSON 작성이 완료된 후에는 반드시 close() 메서드를 호출하여 제너레이터를 닫아야 합니다. 이렇게 하면 내부 버퍼가 플러시되고 시스템 리소스도 안전하게 해제됩니다. 또한 JsonGenerator는 Closeable과 Flushable 인터페이스를 구현하므로, try-with-resources 구문을 활용하면 더욱 안전하게 리소스를 관리할 수 있습니다.