因此,我正在尝试在Swift中使用Codable解析看起来像这样的JSON。
{
"abilities": [
{
"ability": {
"name": "chlorophyll",
"url": "https://pokeapi.co/api/v2/ability/34/"
},
"is_hidden": true,
"slot": 3
},
{
"ability": {
"name": "overgrow",
"url": "https://pokeapi.co/api/v2/ability/65/"
},
"is_hidden": false,
"slot": 1
}
],
"name": "SomeRandomName"
}
现在,当您尝试获取嵌套数据时,它会造成混乱。现在,我正在尝试获取名称,这很容易。我也在尝试获得能力名称,这对我来说很复杂。经过研究,这就是我想出的。
class Pokemon: Codable {
struct Ability: Codable {
var isHidden: Bool
struct AbilityObject: Codable {
var name: String
var url: String
}
var ability: AbilityObject
private enum CodingKeys: String, CodingKey {
case isHidden = "is_hidden"
case ability
}
}
var name: String
var abilities: [Ability]
}
现在有什么更好的方法可以执行此操作,否则我会坚持这样做吗?
答案 0 :(得分:1)
获取您的JSON响应并将其转储到this site中。
它将在没有0x00007fff
的情况下生成这些结构。添加Codable
,使它们看起来像这样:
Codable
对于带有struct Pokemon: Codable {
let abilities: [AbilityElement]
let name: String
struct AbilityElement: Codable {
let ability: Ability
let isHidden: Bool
let slot: Int
struct Ability: Codable {
let name: String
let url: String
}
}
}
的键,您只需声明一个snake_case
并将JSONDecoder
指定为keyDecodingStrategy
。如果您只是从蛇皮箱转换而来,则无需弄乱编码键。仅在重命名密钥时才需要它们。
如果您在其他情况下需要为响应创建自定义编码密钥或更改密钥名称,那么this page应该很有帮助。
您可以将其丢弃在操场上并玩耍:
.convertFromSnakeCase