카테고리 없음
Json과 Gson
미니시리
2023. 1. 29. 23:00
Json이란
JavaScript에서 객체를 표현하는 방법이지만, 다양한 프로그래밍 언어에서 데이터를 주고 받기 위해 사용됩니다.
XML등 과 같이 데이터를 표현하는 일종의 데이터 표현 표준입니다.
주로 인터넷상에서 데이터를 주고 받을 때 그 자료를 표현하는 방법으로 알려져 있습니다.
{
"name" : "myeong",
"age" : "25"
}
- 객체는 {}(중괄호)로 표기합니다.
- 배열은 [](대괄호)로 표기합니다.
- 각 속성은 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
}
]
}