json - 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> = ????
或者有没有人有不同的方法?
解决方案
是的,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)}
推荐阅读
- excel - 有条件地插入分页符
- blogger - 重定向到模板的另一个页面原因
- security - 如何限制从 Internet 访问远程 Linux 服务器上的容器端口?
- go - map var 快照的并发读/写
- angular - Angular - ng-class 或类
- macos - macOS Mojave 中的 SCNView 和处理器加载问题
- node.js - Nodejs如何为每个请求设置内容类型标头
- visual-studio-code - 转到文件在 Visual Studio Code 中不起作用
- c++ - 在选项卡控件中添加对话框
- python - 由于内存错误从文件加载时 Numpy 数组崩溃,但原始 numpy 变量是在同一环境中创建的