본문 바로가기
Android

[Kotlin] Json String (List) 을 Data Class 로 변환 (GSON)

by bryan.oh 2023. 8. 2.
반응형

Json String (List) 을 Data Class 로 변환 (GSON)

이전 글에서 휴일 정보를 Json 으로 가져왔습니다.

참고 
https://date.nager.at/api/v2/publicholidays/2023/KR

 

위의 호출 결과를 Data Class 로 매핑할 경우 아래와 같은 data class 로 만들 수 있습니다.

data class PublicHolidays(
    @SerializedName("date") val date: Date,
    @SerializedName("localName") val dateName: String,
    @SerializedName("name") val engName: String,
    @SerializedName("countryCode") val locale: String,
    @SerializedName("fixed") val fixed: Boolean,
    @SerializedName("global") val global: Boolean,
    @SerializedName("counties") val counties: String?,
    @SerializedName("launchYear") val launchYear: String?,
    @SerializedName("type") val type: String
)

 

Json String 을 직접 받아서 처리할 때

단건일 경우

{
   "date":"2023-01-01",
   "localName":"새해",
   "name":"New Year's Day",
   "countryCode":"KR",
   "fixed":true,
   "global":true,
   "counties":null,
   "launchYear":null,
   "type":"Public"
}

 

var jsonString = "" // 위의 json 문자열
val publicHoliday = Gson().fromJson(jsonString, PublicHolidays::class.java)

 

 

여러 건(List) 일 경우

[
   {
      "date":"2023-01-01",
      "localName":"새해",
      "name":"New Year's Day",
      "countryCode":"KR",
      "fixed":true,
      "global":true,
      "counties":null,
      "launchYear":null,
      "type":"Public"
   },
   {
      "date":"2023-01-21",
      "localName":"설날",
      "name":"Lunar New Year",
      "countryCode":"KR",
      "fixed":false,
      "global":true,
      "counties":null,
      "launchYear":null,
      "type":"Public"
   },
   {
      "date":"2023-01-23",
      "localName":"설날",
      "name":"Lunar New Year",
      "countryCode":"KR",
      "fixed":false,
      "global":true,
      "counties":null,
      "launchYear":null,
      "type":"Public"
   },
   {
      "date":"2023-01-24",
      "localName":"설날",
      "name":"Lunar New Year",
      "countryCode":"KR",
      "fixed":false,
      "global":true,
      "counties":null,
      "launchYear":null,
      "type":"Public"
   },
   {
      "date":"2023-03-01",
      "localName":"3·1절",
      "name":"Independence Movement Day",
      "countryCode":"KR",
      "fixed":true,
      "global":true,
      "counties":null,
      "launchYear":null,
      "type":"Public"
   }
]
var jsonString = "" // 위의 json 문자열
val publicHolidays: List<PublicHolidays> = GsonBuilder()
    .create()
    .fromJson(jsonString, Array<PublicHolidays>::class.java)
    .toList()

 

728x90
반응형

댓글