首页 > 解决方案 > Kotlin 序列化对于这种类型的数据结构?

问题描述

是否可以使用 Kotlinx 序列化来使用这种类型的 JSON 数据结构:

  {
    "USA": {
        "first_name": "Tom",
        "last_name": "Sawyer"
    },
    "UK": {
        "first_name": "Jane",
        "last_name": "Doe"
    },
    "Canada": {
        "first_name": "John",
        "last_name": "Doe"
    }
  }

要创建这种类型的模型:

val contactPersonMap: Map<String, ContactPerson> = ????

或者有没有人有不同的方法?

标签: jsonkotlinserialization

解决方案


是的,kotlinx.serialization会做这项工作:

import kotlinx.serialization.*
import kotlinx.serialization.json.*

@Serializable
data class ContactPerson(val firstName: String, val lastName: String)

fun main() {
    val countryContacts = mapOf<String, ContactPerson>(
        "USA" to ContactPerson("Tom", "Sawyer"),
        "UK" to ContactPerson("Jane", "Doe"),
    )

    val jsonString = Json.encodeToString(countryContacts)
    println("jsonString: $jsonString")
    val deserializedCountryContacts = Json.decodeFromString<Map<String, ContactPerson>>(jsonString)
    println("deserialized: $deserializedCountryContacts")
}

输出是:

jsonString: {"USA":{"firstName":"Tom","lastName":"Sawyer"},"UK":{"firstName":"Jane","lastName":"Doe"}}
deserialized: {USA=ContactPerson(firstName=Tom, lastName=Sawyer), UK=ContactPerson(firstName=Jane, lastName=Doe)}

推荐阅读