자바

[JAVA] JSON, ObjectMapper

ChaeHing 2023. 3. 16. 00:01

JSON (JavaScript Object Notation)

  • 데이터 교환을 위해 만들어진 객체 형태의 포맷
  • 서버와 클라이언트, 서로 다른 언어, 서로 다른 플랫폼등에서 통일된 데이터를 교환하기 위해 사용
  • 데이터를 보내는곳에서 JSON형식으로 만들어 보내고 데이터를 받는곳에서 JSON형식을 자신의 플랫폼에 맞게 해석하여 사용 한다.
  • JavaScript 객체 표기법의 부분집합이기 때문에 웹브라우저  레벨에서 쉽게 해석할 수 있으며, 모양과 규칙 자체가 단순한 관계로 다른 언어에서 구현하기도 쉽다. 그래서 오늘날 사용되는 거의 모든 프로그래밍 언어에서 사용가능하다. 
  • key : value 형식으로 되어있다. 

JSON의 기본 규칙

  • 자바스크립트의 객체와 미묘하게 다른 규칙이 있다.
  JSON JavaScript 객체
반드시 쌍따옴표를 붙여야한다.
{"key":"value"}
따옴표 없이 사용가능
{ key : "value" }
문자열 value 반드시 쌍따옴표를 붙여야한다.
{"key":"value"}
어떠한 형태의 따옴표도 사용가능
{ key : 'value' }
공백 공백이 없어야한다.
{"key":"value"}
공백가능
{ "key" : "value" }

 

ObjectMapper

  • JAVA의 객체(Object)를 JSON형태로 바꿔주거나 JSON형태를 JAVA의 객체(Object)로 바꿔주는 클래스이다.
    • jackson 라이브러리에서 제공한다.
    • 객체를 JSON형태로 변환하는것을 직렬화(serialize) JSON형태를 객체로 바꾸는것을 역직렬화(deserialize)

 

ObjectMapper 사용 예제

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.util.HashMap;

public class JsonEx {
    public static void main(String[] args) throws JsonProcessingException {


        HashMap<String, Integer> data = new HashMap<>(){{
            put("Messi", 10);
            put("Son", 7);
            put("Haaland", 9);
            put("Salah", 11);
        }};

        ObjectMapper mapper  = new ObjectMapper();

        // 직렬화 writeValueAsString() 사용
        String json = mapper.writeValueAsString(data);
        System.out.println("Json : "+json);

        // 역직렬화 readValue() 사용
        HashMap<String, Integer> newData = mapper.readValue(json, HashMap.class);
        System.out.println("Object : "+newData);


    }
}

/*

Json : {"Son":7,"Haaland":9,"Salah":11,"Messi":10}
Object : {Son=7, Haaland=9, Salah=11, Messi=10}

*/