Data Class 를 jsonString 또는 Map 으로 변환하고 싶을 때가 있는데 그때마다 찾아서 쓰게 되더라구요.. 차라리 여기 기록으로 남겨놓으려고 합니다. Data Class 를 변환하는 방법은 여러가지가 있지만  개인적으로 가장 간단한 ...

[안드로이드] Data class to JsonString / Map (with Gson)


 Data Class 를 jsonString 또는 Map 으로 변환하고 싶을 때가 있는데

그때마다 찾아서 쓰게 되더라구요.. 차라리 여기 기록으로 남겨놓으려고 합니다.

Data Class 를 변환하는 방법은 여러가지가 있지만 

개인적으로 가장 간단한 방법이라고 생각되는 걸로 선택하였습니다.

 

 

 

 

1. Gson 사용

Gson 라이브러리를 사용하기 위해 아래 내용을 gradle 추가해 줍니다.

implementation 'com.google.code.gson:gson:2.9.0'

 

 

 

2. Data Class

임의의 Model 데이터 클래스를 정의합니다.

data class Model(
val name: String,
val number: Int,
val list: List<String>
)


val model = Model("이름", 7, listOf("하나", "", ""))

 

 

3. Data Class -> jsonString

Object 를 jsonString 으로 변환해주는 메서드를 정의합니다.

private fun objToJsonString(obj: Any?): String {
try {
val gson = GsonBuilder().create()
return gson.toJson(obj)
} catch (e: IOException) {
e.printStackTrace()
}
return ""
}


val jsonString = objToJsonString(model) // Data Class -> jsonString

실행결과는 아래와 같습니다.

    jsonString = {"list":["하나","둘","셋"],"name":"이름","number":7}

 

 

 

4. jsonString -> Map

jsonString 을 Map 으로 변환해주는 메서드를 정의합니다.

private fun jsonStringToMap(jsonString: String?): Map<String, Any>? {
val type = object : TypeToken<Map<String, Any>>() {}.type
return Gson().fromJson<Map<String, Any>>(jsonString, type)
}

 

val map = jsonStringToMap(jsonString) // jsonString -> Map

실행결과는 아래와 같습니다.

     map {list=[하나, 둘, 셋], name=이름, number=7.0}

 

 

 




0 comments: