준호씨의 블로그

Jackson Json - json 가독성 높이기. pretty printer 본문

개발이야기

Jackson Json - json 가독성 높이기. pretty printer

준호씨 2020. 7. 31. 01:03
반응형

아래와 같은 Person 클래스가 있습니다. (편의상 lombok을 사용합니다.)

@Data
@Builder
@JsonInclude(JsonInclude.Include.NON_NULL)
public class Person {
    private String firstName;
    private String lastName;
    private String byName;
    private String phoneNumber;
}

아래처럼 person 인스턴스를 만들고 ObjectMapper를 이용해서 json 문자열을 만들어서 출력합니다.

Person person = Person.builder()
        .firstName("Michael")
        .lastName("Jordan")
        .byName("Air Jordan")
        .build();

ObjectMapper mapper = new ObjectMapper();
System.out.println(mapper.writeValueAsString(person));

아래처럼 출력됩니다.

{"firstName":"Michael","lastName":"Jordan","byName":"Air Jordan"}

불필요한 공백이나 개행을 없애서 전송되는 용량을 최대한 줄인 json이 생성됩니다. 하지만 가독성은 좀 떨어집니다. 그나마 항목이 적어서 볼 만 하지만 항목이 많아지면 사람이 읽기는 점점 더 복잡해집니다.

디버깅을 하거나 사람이 읽기 좋게 출력하려면 아래처럼 writerWithDefaultPrettyPrinter()를 추가해 줍니다.

System.out.println(mapper.writerWithDefaultPrettyPrinter().writeValueAsString(person));

아래처럼 읽기 좋게 출력되었습니다.

{
  "firstName" : "Michael",
  "lastName" : "Jordan",
  "byName" : "Air Jordan"
}

 

스프링 부트 프로젝트인 경우 application.properties 설정으로 제어할 수 있습니다.

spring.jackson.serialization.indent_output=true

 

아래처럼 writerWithDefaultPrettyPrinter()를 사용하지 않아도

@SpringBootTest
public class MyTest {
    @Autowired
    private ObjectMapper mapper;

    @Test
    public void test() throws JsonProcessingException {
        Person person = Person.builder()
                .firstName("Michael")
                .lastName("Jordan")
                .byName("Air Jordan")
                .build();

        System.out.println(mapper.writeValueAsString(person));
    }
}

아래처럼 pretty 모드로 출력됩니다.

{
  "firstName" : "Michael",
  "lastName" : "Jordan",
  "byName" : "Air Jordan"
}

 

반응형
Comments