[BE/Java] JSON To DTO 파싱 개념 및 샘플코드

    728x90
    반응형

    JSON

    1) "JavaScript Object Notation"의 약어로, 데이터 교환을 위한 경량의 형식

    2) 주로 웹에서 데이터를 주고받거나 저장하는 데 사용

    3) 키-값 쌍의 집합으로 구성되며, 중괄호 {} 안에 각 키-값 쌍이 위치

    JSON 예시
    {
      "name": "John",
      "age": 30,
      "isStudent": false,
      "hobbies": ["reading", "swimming", "painting"],
      "address": {
        "street": "123 Main St",
        "city": "New York",
        "country": "USA"
      },
      "favoriteNumbers": [7, 21, 45],
      "car": null
    }

     

     

    ObjectMapper

    1) Jackson 라이브러리의 일부로 Java 객체와 JSON 간 변환하는 작업을 쉽게 수행할 수 있도록 도와주는 라이브러리

    2) JSON에서 객체로 변환(역직렬화: Deserialization)

    3) 객체에서 JSON으로 변환(직렬화: Serialization)

    public class JsonExample {
        public static void main(String[] args) throws Exception {
            // ObjectMapper 인스턴스 생성 및 초기화
            ObjectMapper objectMapper = new ObjectMapper();
    
            // JSON 데이터를 객체로 변환 (역직렬화)
            String json = "{\"name\":\"John\",\"age\":30}";
            Person person = objectMapper.readValue(json, Person.class);
    
            System.out.println("Name: " + person.getName());
            System.out.println("Age: " + person.getAge());
    
            // 객체를 JSON으로 변환 (직렬화)
            Person newPerson = new Person("Alice", 25);
            String newJson = objectMapper.writeValueAsString(newPerson);
            System.out.println("JSON: " + newJson);
        }
    }
    
    class Person {
        private String name;
        private int age;
    
        public Person(String name, int age) {
            this.name = name;
            this.age = age;
        }
    }

     

     

    JSON To DTO 샘플코드

    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    
    import com.fasterxml.jackson.databind.ObjectMapper;
    
    public class JsonUtil {
        private static Logger logger = LoggerFactory.getLogger(JsonUtil.class);
    
        /**
         * JSON을 파라미터로 받은 Class로 파싱 후 리턴한다.
         * 예시) {"data": "{\"articleId\":\"A1\",\"content\":\"content\",\"regId\":\"john@example.com\"}"}
         * @param <T> 파싱된 DTO
         * @param jsonString String타입의 JSON
         * @param clazz JSON을 파싱할 DTO Class
         * @return DTO로 파싱된 JSON
         */
        public static <T>T jsonToDto(String jsonString, Class<T> clazz) {
            try {
                ObjectMapper objectMapper = new ObjectMapper();
                return objectMapper.readValue(jsonString, clazz);
            } catch(Exception e) {
                logger.error("", e);
                return null;
            }
        }
    }

     

    728x90
    반응형

    댓글