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);
역직렬화는 이런식으로 사용한다고 한다.
'1.프로그래밍 > Java' 카테고리의 다른 글
[Spring Boot] MIME type ('application/json') is not a supported stylesheet MIME type (Interceptor 설정 시 css 오류) (0) | 2022.02.14 |
---|---|
[Spring Boot] 스프링 이메일 전송 사용하기 (SMTP) (0) | 2022.02.07 |
[Java] Collection에 대해 (Collection, Map, HashMap) (0) | 2021.12.03 |
[Spring Boot] Logback 설정 (DB log) - Log4jdbc (2) | 2021.11.29 |
REST API 란? (0) | 2021.11.24 |