개발을 하다보면 Json 파일 정보를 이용하여 매핑할 수 있는 클래스를 만드는 일이 간혹 있습니다. 간단한 Json 파일 형태라면 수작업으로 빠르게 완성할 수 있겠지만 Json 파일 포맷이 매우 큰 경우, 그리고 복잡한 구조인 경우에는 클래스로 정의하기 귀찮고, 복잡하며, 매우 하기 싫은 일 일수 있습니다.
이런 귀찮음과 불편함은 누군가 해결해주었고, 그 해결법중 안드로이드 스튜디오 플러그인에서 설치하여 간단하게 사용하는 방법을 공유드리려 합니다. 추천하는 플러그인은 JsonToKotlinClass 입니다.
https://github.com/wuseal/JsonToKotlinClass
설치하기
안드로이드 스튜디오에서 File-Setting-Plugins 에서 Json To Kotlin Class 를 검색하면 아래 화면과 같이 검색 결과가 나타납니다. 해당 플러그인을 설치해줍니다.
사용하기
설치가 완료되었다면 해당 플러그인을 이용하여 data class를 한번 만들어 보자. 예시로 사용할 Json은 아래 파일을 사용한다.
{"widget": {
"debug": "on",
"window": {
"title": "Sample Konfabulator Widget",
"name": "main_window",
"width": 500,
"height": 500
},
"image": {
"src": "Images/Sun.png",
"name": "sun1",
"hOffset": 250,
"vOffset": 250,
"alignment": "center"
},
"text": {
"data": "Click Here",
"size": 36,
"style": "bold",
"name": "text1",
"hOffset": 250,
"vOffset": 100,
"alignment": "center",
"onMouseUp": "sun1.opacity = (sun1.opacity / 100) * 90;"
}
}}
사용하는 방법은 새로운 클래스를 생성하는 방식과 동일하되, New에서 Kotlin data class File from JSON을 선택한다.
선택하면 아래 그림과 같이 Json 을 입력하는 창이 나타난다. 여기에 Json 포맷을 입력하고, 필요한 설정이 추가로 있는 경우 Advanced를 클릭하여 설정하여준다.
Advanced에서 유의미하게 자주 사용하게되는 옵션은 Annotation 과 Other-Enable Inner class model 이다. Annotation은 어떤 Json 라이브러리를 사용하는지에 맞춰 설정해주면 해당 라이브러리에 맞는 Annotation을 함께 생성하여준다.
Other-Enable inner class model은 Json 포맷에서 부모-자식 관계의 형태를 Inner class 형태로 표현할지, 아니면 개별적인 클래스로 선언 후 참조하는 방식으로 생성할지에 대해 결정한다. 필자의 경우에는 자주 사용하는 옵션이고 이 예제에서도 활성화시킬 것이다.
변환 결과
플러그인을 사용하여 변환한 결과는 아래와 같다. 잘 변환되는 것을 확인할 수 있고, Other-Enable inner class model을 활성화 시킴으로써 Inner class로 구조화 되어 있는 것을 볼 수 있다.
data class JsonExample(
val widget: Widget
) {
data class Widget(
val debug: String,
val image: Image,
val text: Text,
val window: Window
) {
data class Image(
val alignment: String,
val hOffset: Int,
val name: String,
val src: String,
val vOffset: Int
)
data class Text(
val alignment: String,
val `data`: String,
val hOffset: Int,
val name: String,
val onMouseUp: String,
val size: Int,
val style: String,
val vOffset: Int
)
data class Window(
val height: Int,
val name: String,
val title: String,
val width: Int
)
}
}
'Android > Kotlin' 카테고리의 다른 글
[Kotlin] Flow<List<T>> 에서 List<T>로 변환하기. (0) | 2022.09.15 |
---|---|
[Kotlin] Object (0) | 2022.06.22 |
[Kotlin] @Volatile 키워드란? (0) | 2022.06.15 |
[Kotlin] Scope Function (작성중) (0) | 2022.05.22 |
[Kotlin] Coroutine Builder 간략 정리 (0) | 2022.04.25 |