JSON + Java + Jackson

Photo by Ferenc Almasi on Unsplash


Python으로 JSON을 처리하는 웹 애플리케이션을 만들면서, 자바에서는 어떻게 처리하고 있는 지 궁금했다. 검색을 해보니 여러 라이브러리 중 Jackson과 Gson을 많이 사용하고 있는 것 같다. 그 중 Jackson을 이용해서 JSON 데이터를 객체로 변환하는 방법을 찾아봤다. 

JSON 데이터 구조에 맞는 POJO 클래스를 작성해서 처리하는 것이 일반적인 방법인 것 같다. 먼저 POJO 클래스를 만들어 놓는다. 그리고 Jackson에서 제공하는 기능을 이용하여 JSON 데이터를 POJO로 변환하는 것이다. (예제: Jackson Unmarshalling JSON with Unknown Properties)

만약 시스템 내부에서 사용하는 데이터 타입을 정의해서 사용하고 있다면 어떻게 해야 할까? 시스템에 JSON 데이터 타입을 처리하기 위한 POJO 추가로 만들어서 사용하는 건 일관성을 깨뜨리는 것 같아 피하고 싶다. 외부 시스템과 연계하는 레이어를 별도로 두고, 그 곳에서 JSON 데이터 타입을 시스템 내부에서 정의한 데이터 타입으로 변환해 주면 될 것 같다. 어떤 방법이 있을까? JsonNode를 이용하면 JSON의 구조와 key를 모르더라도, 전체 데이터를 확인할 수 있다. 메타정보를 등록해 두고, 처리하면 될 것 같다. 

public static void exploreJsonNode(JsonNode jsonNode) {
    Iterator<JsonNode> it = jsonNode.elements();
 
    for (Iterator<JsonNode> iter = it; iter.hasNext(); ) {
        JsonNode node = iter.next();
        System.out.println(node.getNodeType());
        exploreJsonNode(node);
    }
}
 
public static void main(String[] args) throws IOException {
    String url = "https://......";
 
    ObjectMapper mapper = new ObjectMapper();
    JsonNode jsonNode = mapper.readTree(new URL(url));
 
    exploreJsonNode(jsonNode);
}
cs

특정 시스템과 정형화 된 구조로 JSON 데이터를 주고 받는 경우라면 TypeReference를 이용해도 될 것 같다. 


댓글 쓰기

0 댓글