Json & Gson
Json
- (속성-값 쌍) / (키-값 쌍)으로 이루어진 데이터 오브젝트를 전달하기 위해
- 인간이 읽을 수 있는 텍스트를 사용하는 개방형 표준 포맷
- 공식 MediaType
application/json
특징
- 서버와 클라이언트 간의 교류에서 많이 사용된다.
- 자바스크립트 객체 표기법과 아주 유사
- JSON 문서 형식은 자바스크립트 객체의 형식을 기반으로 만들어졌다.
- 자바스크립트의 문법과 굉장히 유사하지만 텍스트 형식일 뿐이다.
- 다른 프로그래밍 언어를 이용해서도 쉽게 만들 수 있다.
- 특정 언어에 종속되지 않음
- 대부분의 프로그래밍 언어에서 JSON 포맷의 데이터를 핸들링 할 수 있는 라이브러리를 제공한다.
기본 자료형
- 수(Number)
- 문자열(String)
- 0개 이상의 유니코드 문자들의 연속. 문자열은 큰 따옴표(“)로 구분하며 역슬래시 이스케이프 문법을 지원한다.
- 참/거짓(Boolean)
- true 또는 false 값
- 배열(Array)
- 0 이상의 임의의 종류의 값으로 이루어진 순서가 있는 리스트. 대괄호로 나타내며 요소는 쉼표로 구분한다.
- 객체(Object)
- 순서가 없는 이름/값 쌍의 집합으로, 이름(키)이 문자열이다.
- null
- 빈 값으로, null을 사용한다.
Gson
- Json 구조를 띄는 직렬화된 데이터를 Java 객체로 역직렬화, 직렬화 해주는 Java Library
- Json Object <-> Java Object
- 를 도와주는 구글에서 개발한 오픈소스
종속성 추가
dependencies {
implementation 'com.google.code.gson:gson:2.9.0'
}
사용법 with Kotlin
다음의 Data Class를 직렬화하고 역직렬화를 수행한다.
data class Song(
val title: String,
val singer: String,
var second: Int = 0,
var playTime: Int = 0,
var isPlaying: Boolean = false,
var mills: Float = 0f,
var music: String = "",
)
- 직렬화
- gson 객체를 생성
private val gson = Gson()
- gson의 toJson을 통해 직렬화 수행
gson.toJson(song)
- 이렇게 된 데이터는 json형태의 String 문자열로 직렬화 수행되어 저장된다.
- gson 객체를 생성
- 역직렬화
- gson 객체를 생성
private val gson = Gson()
- gson의 fromJson을 통해 역직렬화 수행
gson.fromJson을(songJson, Song::class.java)
- 이렇게 된 데이터는 Song Data Class에 맞추어 Data class를 생성하고 반환한다. - 일반적으로 변환하고자 하는 Data Class와 Json Object의 Key값은 일치해야 한다.
- 하지만 특수한 경우 이름을 바꿔야 하는 경우가 있다면,
-
@SerializedName("key")
의 어노테이션을 적용하여 사용할 수 있다.
- gson 객체를 생성