[Kotlin] JSON To Kotlin Class를 사용하여 JSON에서 데이터 클래스 생성

소개



JSON To Kotlin Class는 Android Studio, IntelliJ IDEA에서 작동하는 플러그인입니다.
이 플러그인을 사용하면 JSON에서 데이터 클래스를 쉽게 생성할 수 있습니다.

JSON To Kotlin Class 설치



이번에는 IntelliJ IDEA로 동작을 확인해 나갈 것입니다.
다음 절차에 따라 JSON To Kotlin Class를 설치합니다.
  • IntelliJ Idea 시작
  • IntelliJ Idea->Preferences->Plugins를 엽니다.
  • Marketplace->Json To Kotlin Class를 입력합니다.
  • JSON To Kotlin Class (JsonToClass)에서 Install을 선택합니다.
  • Restart IDE를 선택하고 IntelliJ Idea를 다시 시작합니다.

  • JSON 문자열에서 클래스 생성



    JSON To Kotlin Class를 이용하면,
    다음 단계를 통해 JSON 문자열에서 데이터 클래스를 생성할 수 있습니다.
  • Project->src를 마우스 오른쪽 버튼으로 클릭하고 New->Kotlin data class File from Json을 선택한다.
  • Generate Kotlin Data Class Code에 JSON 파일을 붙여넣습니다.
  • 클래스 이름에 이름을 입력합니다.
  • 모든 입력이 완료되면 "Generate"를 선택한다.

  • 다음과 같은 느낌으로 이번은 GitHub API의 GET /repos/:owner/:repo/contributors
    취득할 수 있는 다음의 JSON을 붙여 넣어 보았습니다, 그 때문에 "Class Name"은 Contributor로 했습니다.



    Generate를 선택하면 자동으로 다음과 같은 데이터 클래스가 생성됩니다.
    네 잘 데이터 클래스가 출력되고 있네요.

    Contributor.kt
    data class Contributor(
        val avatar_url: String,
        val contributions: Int,
        val events_url: String,
        val followers_url: String,
        val following_url: String,
        val gists_url: String,
        val gravatar_id: String,
        val html_url: String,
        val id: Int,
        val login: String,
        val node_id: String,
        val organizations_url: String,
        val received_events_url: String,
        val repos_url: String,
        val site_admin: Boolean,
        val starred_url: String,
        val subscriptions_url: String,
        val type: String,
        val url: String
    )
    

    데이터 클래스를 생성할 때 규칙 설정



    JSON To Kotlin Class에서는 데이터 클래스를 생성할 때 규칙을 설정할 수 있습니다.
    다음 절차에 따라 설정 화면을 열 수 있습니다.
  • Project->src를 마우스 오른쪽 버튼으로 클릭하고 New->Kotlin data class File from Json을 선택한다.
  • Generate Kotlin Data Class Code에서 Advanced를 선택합니다.

  • 다음과 같은 느낌으로 크게 나누어 Property,Annotation,Other,Extensions의 설정이 있는 것 같습니다.
    아무튼 주로 사용하는 것은 Property의 곳이 된다고는 생각합니다.









    예를 들어 'Property'->'Keyword'를 'Var'로 변경하면,
    다음과 같이 속성이 Var로 선언된 데이터 클래스가 생성됩니다.

    Contributor.kt(Var)
    data class Contributor(
        var avatar_url: String,
        var contributions: Int,
        var events_url: String,
        var followers_url: String,
        var following_url: String,
        var gists_url: String,
        var gravatar_id: String,
        var html_url: String,
        var id: Int,
        var login: String,
        var node_id: String,
        var organizations_url: String,
        var received_events_url: String,
        var repos_url: String,
        var site_admin: Boolean,
        var starred_url: String,
        var subscriptions_url: String,
        var type: String,
        var url: String
    )
    

    또한 'Property'-> 'Type'을 'Nullable'로 변경하면,
    다음과 같이 속성이 NULL을 허용할 수 있도록 데이터 클래스가 생성됩니다.

    Contributor.kt (Nullable)
    data class Contributor(
        val avatar_url: String?,
        val contributions: Int?,
        val events_url: String?,
        val followers_url: String?,
        val following_url: String?,
        val gists_url: String?,
        val gravatar_id: String?,
        val html_url: String?,
        val id: Int?,
        val login: String?,
        val node_id: String?,
        val organizations_url: String?,
        val received_events_url: String?,
        val repos_url: String?,
        val site_admin: Boolean?,
        val starred_url: String?,
        val subscriptions_url: String?,
        val type: String?,
        val url: String?
    
    

    또한 "Property"-> "Default Value Strategy"를 "Init With Non-Null Default Value(Avoid Null)"로
    변경하면 다음과 같이 초기화 값을 NULL 이외로 초기화해 주는 데이터 클래스를 생성할 수 있습니다.

    Contriburt.kt (InitWithNonNullDefaultValue (AvoidNull)
    data class Contributor(
        val avatar_url: String = "",
        val contributions: Int = 0,
        val events_url: String = "",
        val followers_url: String = "",
        val following_url: String = "",
        val gists_url: String = "",
        val gravatar_id: String = "",
        val html_url: String = "",
        val id: Int = 0,
        val login: String = "",
        val node_id: String = "",
        val organizations_url: String = "",
        val received_events_url: String = "",
        val repos_url: String = "",
        val site_admin: Boolean = false,
        val starred_url: String = "",
        val subscriptions_url: String = "",
        val type: String = "",
        val url: String = ""
    )
    

    이런 느낌일 정도는 데이터 클래스를 생성할 때의 룰을 설정할 수 있는 것 같습니다.

    결론


  • JSON에서 데이터 클래스를 생성하려면 JSON To Kotlin Class 플러그인을 사용할 수 있습니다
  • JSON을 붙여 Generate하는 것만으로 데이터 클래스를 생성할 수 있다
  • JSON에서 데이터 클래스를 생성 할 때 규칙을 설정할 수 있습니다.

    참고




    제목
    간략한 설명


    JsonToKotlinClass - GitHub
    GitHub에 옵션 설정의 상세가 기재되어 있으므로, 자세한 설정이 하고 싶은 경우는 여기를 열람한다.

    JsonToKotlinClass(JsonToKotlinClass) Plugins - JetBrains
    플러그인 설명 페이지입니다.
  • 좋은 웹페이지 즐겨찾기