# Gson
Gson
은 Java 객체와 JSON 간의 변환에 사용되는 라이브러리다.
# 의존성
dependencies {
implementation 'com.google.code.gson:gson:2.8.7'
}
# JsonObject를 문자열로 변환
import com.google.gson.Gson
import com.google.gson.JsonObject
val gson = Gson()
val jsonObject: JsonObject = JsonObject()
jsonObject.addProperty("name", "Paul")
jsonObject.addProperty("age", 20)
val jsonString: String = gson.toJson(jsonObject) // {"name":"Paul","age":20}
JsonObject
은 중첩될 수 있다.
val gson = Gson()
val player1 = JsonObject()
player1.addProperty("name", "Smith")
player1.addProperty("age", 20)
val player2 = JsonObject()
player2.addProperty("name", "John")
player2.addProperty("age", 24)
val players = JsonObject()
players.add("designer", player1)
players.add("programmer", player2)
println(players) // {"Designer":{"name":"Smith","age":20},"Programmer":{"name":"John","age":24}}
val designer = players.get("designer").asJsonObject // {"name":"Smith","age":20}
val programmer = players.get("programmer").asJsonObject // {"name":"John","age":24}
val jsonString: String = gson.toJson(players) // {"designer":{"name":"Smith","age":20},"programmer":{"name":"John","age":24}}
# 문자열을 JsonObject로 변환
JsonParser
를 사용하면 문자열을 JsonObject
로 변환할 수 있다.
import com.google.gson.JsonObject
import com.google.gson.JsonParser
val gson = Gson()
val jsonString: String = "{\"name\":\"Paul\",\"age\":20}"
val jsonObject: JsonObject = JsonParser().parse(jsonString).asJsonObject
val name: String = jsonObject.get("name").asString // Paul
val age: Int = jsonObject.get("age").asInt // 20
# JsonArray
JsonArray
을 사용하면 여러 JsonObject
를 배열 형태로 가질 수 있다.
import com.google.gson.Gson
import com.google.gson.JsonArray
val gson = Gson()
val player1 = JsonObject()
player1.addProperty("name", "Smith")
player1.addProperty("age", 20)
val player2 = JsonObject()
player2.addProperty("name", "John")
player2.addProperty("age", 24)
val players = JsonArray()
players.add(player1)
players.add(player2)
println(players) // [{"name":"Smith","age":20},{"name":"John","age":24}]
val first = players.get(0).asJsonObject // {"name":"Smith","age":20}
val second = players.get(1).asJsonObject // {"name":"John","age":24}
val jsonString: String = gson.toJson(players) // [{"name":"Smith","age":20},{"name":"John","age":24}]
val jsonArray: JsonArray = JsonParser().parse(jsonString).asJsonArray
# Java 객체와 문자열 간 변환
Gson.toJson()
을 사용하면 Java 객체를 문자열로 변환할 수 있다.
import com.google.gson.annotations.SerializedName
data class Person (
@SerialzedName("name") name: String,
@SerialzedName("id") id: Long,
@SerialzedName("access_token") accessToken: String
)
import com.google.gson.Gson
val gson = Gson()
val person: Person = Person("Paul", 1, "D123Wcwqe123jkkl2KJ")
val jsonString: String = gson.toJson(person) // {"name":"Paul","id":1,"access_token":"D123Wcwqe123jkkl2KJ"}
@Expose
를 추가하면 특정 필드의 값이 null
일 경우 객체를 Json 문자열로 변환할 때 해당 필드를 자동으로 생략해준다.해당 값이 null일 경우, json으로 만들 필드를 자동 생략해 준다.
import com.google.gson.annotations.SerializedName
import com.google.gson.annotations.Expose
data class Person (
@SerializedName("name") val name: String,
@SerializedName("id") val id: Long,
@Expose @SerializedName("access_token") val accessToken: String? = null
)
import com.google.gson.Gson
val gson = Gson()
val person: Person = Person("Paul", 1)
val jsonString: String = gson.toJson(person) // {"name":"Paul","id":1}
Gson.fromJson()
을 사용하면 문자열을 Java 객체로 변환할 수 있다.
val gson = Gson()
val jsonString: String = "{\"name\":\"Paul\",\"id\":1,\"access_token\":\"D123Wcwqe123jkkl2KJ\"}"
val person: Person = gson.fromJson(jsonString, Person::class.java)
println(person.id) // 1
println(person.name) // Paul
println(person.accessToken) // D123Wcwqe123jkkl2KJ