gson 라이브러리 활용
gson 라이브러리는 json object 를 json string 으로 변환 시켜주거나 json string 을 json object 로 쉽게 변환 할 수 있게 만들어 주는 라이브러리이다.
라이브러리 추가는 app gradle dependency에 다음과 같이 추가해주면 사용 가능하다.
dependencies {
implementation 'com.google.code.gson:gson:2.8.6'
}
우리는 작업 하다보면 특정 Object 내부 필드를 모두 로그로 보고 싶을 때가 있다.
그렇게 되면 object 의 toString 를 override 해서 모든 필드에 대해 다시 정의를 해줘야 모두 노출이 가능하다.
그리고 필요한 object 마다 toString 을 재정의 해서 번거롭게 사용 해야 한다.
class ToJsonStringTest {
@Test
fun toStringTest() {
val order = Order(
id = 1,
goods = listOf(
Goods(id = 1, name = "나나", price = 3000L),
Goods(id = 2, name = "다다", price = 4000L)
)
)
println(order.toString())
}
class Order(val id: Long, val goods: List<Goods>) {
override fun toString(): String { //return 을 재정의 해줘야 함.
return "id : $id , goods : $goods"
}
}
class Goods(val id: Long, val name: String, val price: Long) {
override fun toString(): String {//return 을 재정의 해줘야 함.
return "id : $id , name : $name , price : $price"
}
}
}
아래는 order.toString 의 결과이다.
이부분을 gson 라이브러리를 사용해서 다음과 같이 해결 하였다.
fun Any.toJsonString(withNull: Boolean = false): String {
return try {
val builder = GsonBuilder().disableHtmlEscaping().setPrettyPrinting()
if(withNull) builder.serializeNulls()
builder.create().toJson(this)
} catch (e: Exception) {
e.printStackTrace()
"Fail to print toJsonString()"
}
}
class ToJsonStringTest {
@Test
fun toStringTest() {
val order = Order(
id = 1,
goods = listOf(
Goods(id = 1, name = "나나", price = 3000L),
Goods(id = 2, name = "다다", price = 4000L)
)
)
println(order.toJsonString())
}
class Order(val id: Long, val goods: List<Goods>)
class Goods(val id: Long, val name: String, val price: Long)
}
아래는 order.toJsonString 의 결과이다.
toString 을 override 하지않고 Gson 을 사용해 Kotlin Extension 으로 만들어 둔 다음 사용하면 된다.