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

Java에서 Jackson의 JsonGenerator 설정을 조회하는 방법 완벽 가이드

Java에서 JSON 데이터를 다룰 때 Jackson 라이브러리의 JsonGenerator 클래스는 메모리에 객체 모델(Object Model)을 구성하는 대신, 스트림 방식으로 JSON 데이터를 직접 작성할 수 있게 해주는 핵심 클래스입니다.

JsonGenerator에서 켜고 끌 수 있는(on/off) 설정 목록JsonGenerator.Feature라는 열거형(enum)에 정의되어 있습니다. 이 열거형에는 해당 enum 타입의 모든 상수를 배열로 반환하는 정적 메서드 values()가 포함되어 있어, 전체 설정 항목을 손쉽게 순회하며 확인할 수 있습니다.

문법(Syntax)

public static enum JsonGenerator.Feature extends Enum<JsonGenerator.Feature>

설정 상태 확인하기

각 기능(Feature)이 현재 활성화되어 있는지 여부는 isEnabled() 메서드를 통해 확인할 수 있습니다. 아래 예제는 모든 Feature를 순회하면서 각 설정의 활성화 상태를 출력하는 코드입니다.

예제 코드

import java.io.*;
import com.fasterxml.jackson.core.*;

public class JsonGeneratorSettingsTest {
   public static void main(String[] args) throws IOException {
      StringWriter writer = new StringWriter();
      JsonFactory jsonFactory = new JsonFactory();
      JsonGenerator jsonGenerator = jsonFactory.createGenerator(writer);

      for(JsonGenerator.Feature feature : JsonGenerator.Feature.values()) {
         boolean result = jsonGenerator.isEnabled(feature);
         System.out.println(feature.name() + ":" + result);
      }
      jsonGenerator.close();
   }
}

실행 결과(Output)

위 코드를 실행하면 기본 생성된 JsonGenerator의 각 Feature별 활성화 여부가 다음과 같이 출력됩니다.

AUTO_CLOSE_TARGET:true
AUTO_CLOSE_JSON_CONTENT:true
FLUSH_PASSED_TO_STREAM:true
QUOTE_FIELD_NAMES:true
QUOTE_NON_NUMERIC_NUMBERS:true
ESCAPE_NON_ASCII:false
WRITE_NUMBERS_AS_STRINGS:false
WRITE_BIGDECIMAL_AS_PLAIN:false
STRICT_DUPLICATE_DETECTION:false
IGNORE_UNKNOWN:false

주요 Feature 설명

  • AUTO_CLOSE_TARGET(true): 제너레이터가 닫힐 때 대상 스트림도 자동으로 닫습니다.
  • AUTO_CLOSE_JSON_CONTENT(true): 미완료된 JSON 배열/객체를 자동으로 닫아줍니다.
  • FLUSH_PASSED_TO_STREAM(true): flush 호출 시 하위 출력 스트림까지 함께 플러시합니다.
  • QUOTE_FIELD_NAMES(true): 필드 이름을 큰따옴표로 감싸서 출력합니다.
  • QUOTE_NON_NUMERIC_NUMBERS(true): NaN, Infinity 같은 비숫자 값을 따옴표로 감싼 문자열로 처리합니다.
  • ESCAPE_NON_ASCII(false): ASCII 범위를 벗어나는 문자를 유니코드 이스케이프 시퀀스로 변환합니다. (기본값: 비활성)
  • WRITE_NUMBERS_AS_STRINGS(false): 숫자를 문자열로 변환하여 작성합니다.
  • WRITE_BIGDECIMAL_AS_PLAIN(false): BigDecimal을 지수 표기법 없이 일반 형태로 출력합니다.
  • STRICT_DUPLICATE_DETECTION(false): 중복된 필드 이름을 엄격하게 검사하여 오류를 발생시킵니다.

이처럼 values()isEnabled() 메서드를 조합하면 JsonGenerator의 모든 설정 상태를 프로그래밍 방식으로 쉽게 점검할 수 있으며, 필요에 따라 특정 Feature만 활성화하거나 비활성화하여 JSON 출력 동작을 세밀하게 제어할 수 있습니다.