B-Teck!

お仕事からゲームまで幅広く

【Kotlin】Kotlin+JacksonでJSONをparseする

準備

ビルドツールの設定に jackson-module-kotlin を追加する。
バージョンは任意で。

  • maven
    <dependencies>
        <dependency>
            <groupId>com.fasterxml.jackson.module</groupId>
            <artifactId>jackson-module-kotlin</artifactId>
            <version>2.9.7</version>
        </dependency>
    </dependencies>
  • gradle
compile group: 'com.fasterxml.jackson.module', name: 'jackson-module-kotlin', version: '2.9.7'

手順

JSONを用意する

{
    "name" : "beatdjam",
    "age" : "28",
    "url" : "http://beatdjam.hatenablog.com/"
}

JSONのプロパティに対応するdata classを作る

data class Person(
    val name : String,
    val age : String,
    val url : String
)

JSONをdata classへparseするメソッドを作る

inline fun <reified T : Any> parseJSON(json : String) : T {
    return jacksonObjectMapper().readValue(json, T::class.java)
}

data classを型パラメータに指定して3のメソッドを呼び出す

val result = parseJSON<Person>(json)
// または
val result2 : Person = parseJSON(json)

ソース全文

import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper

fun main(args: Array<String>) {
    val json = """
        {
            "name" : "beatdjam",
            "age" : "28",
            "url" : "http://beatdjam.hatenablog.com/"
        }
    """

    val result = parseJSON<Person>(json)
    println(result.name)
    println(result.age)
    println(result.url)
}

inline fun <reified T : Any> parseJSON(json : String) : T {
    return jacksonObjectMapper().readValue(json, T::class.java)
}

data class Person(
    val name : String,
    val age : String,
    val url : String
)