JSON은 JavaScript Object Notation의 줄임말로, 데이터 교환을 위해 만들어진 객체 형태의 포맷이다.
JSON은 서로 다른 프로그램 사이에서 데이터를 교환하기 위한 포맷
Map<String, String> message = new HashMap<>(){{
put("sender", "김코딩");
put("receiver", "박해커");
put("message", "밥먹을래?");
put("createdAt", "2021-01-12,10:10:10");
}};
이런 식을 전달하면 Java를 사용하지 않는 프로그램에서 데이터를 정확하게 파악할 수 없다.
jackson
라이브러리에서 제공하는 ObjectMapper 클래스를 사용하여 JSON형태로 변경하는 방법이 있다.
ObjectMapper mapper = new ObjectMapper();
String json = mapper.writeValueAsString(message);
System.out.println(json);
//
{"createdAt":"2021-01-12,10:10:10","receiver":"박해커","sender":"김코딩","message":"밥먹을래?"}
//원래는 이렇게 나옴
{createdAt=2021-01-12,10:10:10, receiver=박해커, sender=김코딩, message=밥 먹을래?}
writeValueAsString하는 이 과정을 직렬화(serialize)라고 한다.
직렬화한 문자열을 받으면 다시 객체의 형태로 만드는 법
ObjectMapper mapper = new ObjectMapper();
String json = "{\"createdAt\":\"2021-01-12,10:10:10\",\"receiver\":\"박해커\",\"sender\":\"김코딩\",\"message\":\"밥먹을래?\"}";
Map<String, String> deserializedData = mapper.readValue(json, Map.class);
System.out.println(deserializedData);
//
{createdAt=2021-01-12,10:10:10, receiver=박해커, sender=김코딩, message=밥먹을래?}
readValue를 적용하는 이 과정을 역직렬화(deserialize)한다고 한다.
인풋 - 직렬화 - 역직렬화