2
0

JSON(MAP<String, Any>)のシリアライズをkotlinとswiftで比較

Last updated at Posted at 2024-03-21

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を指定してキャメルケースを_へ変換できる
2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0