swift - Swift Codable:使用动态键编码结构
问题描述
我想要以下 JSON 结构(假示例):
{
"Admin" :
{
"name" : "John",
"age" : "42"
},
"Sales" :
{
"name" : "John",
"age" : "42"
},
"CEO" :
{
"name" : "Peter",
"age" : "52",
"salary" : "100000"
},
"Janitor" :
{
"name" : "Matthew",
"age" : "22"
}
}
如您所见,结构如果确定,但结构的名称是动态的。
如何将其转换为 Swift Codable 结构?当前尝试:
struct Positions: Codable
{
var posDicts: [String: Position] = [:]
}
struct Position: Codable
{
let name: String
let age: Int
let salary: Int?
}
但是,这将给出以下结果:
"posDicts" : {
"Admin" :
{
"name" : "John",
"age" : "42"
},
"Sales" :
{
"name" : "John",
"age" : "42"
},
"CEO" :
{
"name" : "Peter",
"age" : "52",
"salary" : "100000"
},
"Janitor" :
{
"name" : "Matthew",
"age" : "22"
}
}
我不想要 JSON 中的“posDicts”。什么是最好/最简单的解决方案?
解决方案
而不是解码
let result = try JSONDecoder().decode(Positions.self, from: data)
删除Positions
结构并解码
let result = try JSONDecoder().decode([String:Position].self, from: data)
要对字典进行相应的编码,请将其声明为
var positions = [String:Position]()
推荐阅读
- javascript - 在 Ant Design Tree 中过滤 treeNodes
- flutter - 如何在 Flutter 中打开原生表情符号键盘
- wix - 为非管理员用户创建 WiX MSI 补丁包或安装更新
- svelte - Svelte 应用程序构建但无法访问本地主机
- android - 从接收方获取数据时,intent 为 null
- python - 如何在 Python 中创建同一个类的多个实例并传递不同的参数
- vue.js - 使用状态快照在 Vuex 中撤消/重做
- android - Flutter build with CI getting error Program type already present: com.google.common.util.concurrent.ListenableFuture
- c# - 如何解决一个信号应用 id 无效的问题
- python - 取不同字符串中的相同元素之一