Swift
struct Configuration: Decodable {
let id: String
let name : String
let age: Int
enum CodingKeys: String, CodingKey {
case id = "id"
case name = "name"
case age = "age"
}
static func create(_ dictionary: [String: Any]) -> Configuration? {
guard let json = try? JSONSerialization.data(withJSONObject: dictionary),
let instance = try? JSONDecoder().decode(Configuration.self, from: json)
else {
return nil
}
return instance
}
}
let response: Map<String, Any> = getXXXFromRepository()
let result: Configuration = Configuration.create(response)
ポイント
- JSONからデコードしたい型は
Decodable
プロトコルに準拠する -
CodingKey
を実装してキーを定義する必要がある
kotlin
@Serializable
data class Configuration(
@SerialName("id") val id: String,
@SerialName("name") val name: String,
@SerialName("age") val age: Int,
)
val response:Map<String, Any> = getXXXFromRepository()
val result: Configuration = Properties.decodeFromMap<Configuration>(map = response)
ポイント
以下のステップを踏む
1. アプリレベルのbuild.gradle
のpluginに以下を記述
plugins {
id 'org.jetbrains.kotlin.plugin.serialization' version '2.0.0' apply false
}
2. モジュールレベルのbuild.gradle
のpluginに以下を記述
plugins {
id 'org.jetbrains.kotlin.plugin.serialization'
}
3. dependenciesに以下を記述
dependencies {
implementation("org.jetbrains.kotlinx:kotlinx-serialization-properties:1.7.1")
}
-
data class
に@Serializable
アノテーションをつける - キー属性に
@SerialName
を指定してキャメルケースを_
へ変換できる