アプリ開発備忘録

PlayStationMobile、Android、UWPの開発備忘録

【kotlinx.serialization】Kotlin/JSでJsonをパース

1.4-M1 で試そうとしたのですが、おそらく、kotlinx.serialization のコード生成部分がうまく動かなかったので 1.3.71 で行いました。

gradleのバージョンは 5.6.1
Slackのコマンドのリクエストをパースしてみました。

コード

build.gradle.kts

plugins {
    kotlin("js") version "1.3.71"
    kotlin("plugin.serialization") version "1.3.71"
}

group = "org.example"
version = "1.0-SNAPSHOT"

repositories {
    mavenCentral()
}

dependencies {
    implementation("org.jetbrains.kotlin:kotlin-stdlib-js")
    testImplementation("org.jetbrains.kotlin:kotlin-test-js")

    val serializationVersion = "0.20.0"
    implementation("org.jetbrains.kotlinx:kotlinx-serialization-runtime-js:$serializationVersion")
}

kotlin {
    target {
        browser {
        }
    }
}

SlackResponse.kt

import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable

@Serializable
data class SlackResponse(
    @SerialName("team_id") val teamId: String,
    @SerialName("text") val text: String,
    @SerialName("user_name") val userName: String,
    @SerialName("user_id") val userId: String,
    @SerialName("command") val command: String,
    @SerialName("channel_name") val channelName: String,
    @SerialName("trigger_id") val triggerId: String,
    @SerialName("channel_id") val channelId: String,
    @SerialName("response_url") val responseUrl: String,
    @SerialName("token") val token: String,
    @SerialName("team_domain") val teamDomain: String
)

Main.kt

import kotlinx.serialization.json.Json
import kotlinx.serialization.json.JsonConfiguration

fun main() {
    val json = """
        {
            "team_id": "",
            "text": "任意のテキスト",
            "user_name": "matsudamper",
            "user_id": "",
            "command": "/command_name",
            "channel_name": "",
            "trigger_id": "",
            "channel_id": "",
            "response_url": "https://hooks.slack.com/commands/",
            "token": "",
            "team_domain": ""
        }
    """.trimIndent()

    // 1.4 -> Json().decodeFromString(SlackResponse.serializer(), json)
    val result = Json(JsonConfiguration.Stable).parse(SlackResponse.serializer(), json)
    println(result)
}