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

2023. 8. 19. 22:55
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
반응형

BELATED ARTICLES

more