본문 바로가기

1.프로그래밍/Java

[Spring Boot] JSON 과 GSON이란?

728x90
반응형

GSON에 앞서 JSON에 대한 정확한 개념을 이해하는게 좋을거라고 생각된다.

JSON (JavaScript Object Notation) 이란?

JavaScript에서 객체를 표현하는 방법이지만, 다양한 프로그래밍
언어에서 데이터를 주고 받기 위해 사용된다.

XML등 과 같이 데이터를 표현하는 일종의 데이터 표현 표준이다.
주로 인터넷상에서 데이터를 주고 받을 때 그 자료를 표현하는
방법으로 알려져 있다.

{
  "name" : "myeong",
  "age" : "25"
}

위의 형식과 같이 JSON은 { } (중괄호) 를 통해 하나의 객체를 표현하며,

배열은 [] (대괄호) 로 표기한다.

내부에는 Key : Value 값들로 각 속성값을 정의하고 있으며,

Key 와 Value 는 : (콜론) 에 의해 구분되고

각각의 속성은 , (쉼표)로 구분되어 진다.

JSON 장점

가독성

  • 객체의 구조를 파악하기 쉬운 형태로 이루어져 있다.

가벼움

  • JSON 이전에 가장 많이 사용한 데이터 교환 방식인 XML에 비해 가볍다.

플랫폼 독립적

  • 특정 언어나 플랫폼에 독립적이어서 위으 JSON 형식만을 지킨다면
    어떤 시스템이든 데이터 교환이 가능하다.
  • 대부분의 언어에서 JSON 라이브러리를 제공하기 때문에 편리하다.

간단한 JSON 형식을 JavaScript Object 변환

var jsonText = '{"name" : "myeong", "age" : "25"}';
var realObject = JSON.parse(jsonText);
var jsonText2 = JSON.stringfiy(realObject);

console.log(realObject);
//  {name: 'myeong', age: '25'}
consoel.log(jsonText2);
//  {"name":"myeong","age":"25"}

JSON.parse(JSON으로 변환할 문자열)

  • JSON 형식의 텍스트를 자바스크립트 객체로 변환한다.JSON.stringify(JSON 문자열로 변환할 값)
  • 자바스크립트 객체를 JSON 텍스트로 변환한다.

Spring Boot JSON 이용하기


import lombok.Getter;
import lombok.Setter;

@Getter
@Setter
public class TestJson {
    private String title;
    private String content;
}
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class TestController {

    @ResponseBody
    @GetMapping("/test")
    public TestJson test() {
        TestJson test = new TestJson();
        test.setTitle("JsonTest Title");
        test.setContent("JsonTest Content");

        return test;
    }
}

// 실행 결과 -> {"title": "JsonTest Title", "content" : "JsonTest Content"} 

위의 방법은 Java의 객체를 이용한 데이터를 JSON 형식으로
만든 방법이지만
GSON을 사용해 Java 클래스를 직렬화 혹은 역직렬화를 쉽고 간단하게
사용할 수 있다.

GSON

자바 객체를 JSON으로 바꾸는 작업은 GSON 이라는 패키지를 이용하면 쉽게 할 수 있다.
GSON은 구글에서 만든 자바 오브젝트 직렬화/역직렬화 라이브러리다.

Java 클래스를 다른 곳으로 전송할 때 사용할 수 있는 직렬화(Serialize) 포맷으로 JSON이나 XML 같은 텍스트 포맷을 사용하는 경우가 많다.

즉, GSON은 자바객체를 JSON으로, JSON을 자바객체로 쉽게 표현 및 변환이 가능하다.


Spring Boot GSON 예제

Maven 설정

<dependency>
<groupId>com.google.code.gson<groupId>
<artifactId>gson</artifactId>
<version>2.8.0</version>
</dependency>

Gradle 설정

dependencies {
implementation 'com.google.code.gson:gson:2.8.6'
}


import com.google.gson.JsonArray;
import com.google.gson.JsonObject;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class GsonTestController {

    @ResponseBody
    @GetMapping("/test2")
    public String test2() {
        JsonObject jsonObj = new JsonObject();

        jsonObj.addProperty("title", "GsonTest Title");
        jsonObj.addProperty("content", "GsonTest Content");

        JsonArray jsonArr = new JsonArray();
        for (int i = 0; i < 5; i++) {
            JsonObject jsonObj2 = new JsonObject();
            jsonObj2.addProperty("data", i);
            jsonArr.add(jsonObj2);
        }

        jsonObj.add("testData", jsonArr);

        return jsonObj.toString();
    }
}

실행결과

{"title":"GsonTest Title","content":"GsonTest Content","testData":[{"data":0},{"data":1},{"data":2},{"data":3},{"data":4}]}
{
  "title": "GsonTest Title",
  "content": "GsonTest Content",
  "testData": [
    {
      "data": 0
    },
    {
      "data": 1
    },
    {
      "data": 2
    },
    {
      "data": 3
    },
    {
      "data": 4
    }
  ]
}

이런식으로 GSON을 사용하여 Java 객체를 JSON으로 손쉽게 이용, 변환이 가능하다

Gson 직렬화

흔히 Spring Boot를 이용하여 리스트를 Service로 부터 받아와 Controller에서 View로 리스트를 Json 형식으로 전달할 때 사용하는 방식이다.

@RequestMapping(value = "test", method=RequestMethod.GET)
public void gsonTest(Model model) {
    Gson gson = new Gson;
    String getList = testService.getList();
    String json = gson.toJson(getList);

    model.addAttributes("list", list);
}

이런식으로 Json으로 직렬화 시킨 데이터를 Model에 담아 보내게 되면 View에서 Json데이터로 작업을 할 수 있게 된다.

Gson 역직렬화

String jsonInput = "json 데이터";
Example ex = new Gson().fromJson(jsonInput, Example.class); 

역직렬화는 이런식으로 사용한다고 한다.

728x90
반응형