The*_*rF8 3 json swift decodable
我正在尝试解码以下 JSON 对象
{
"result":[
{
"rank":12,
"user":{
"name":"bob","age":12
}
},
{
"1":[
{
"name":"bob","age":12
},
{
"name":"tim","age":13
},
{
"name":"tony","age":12
},
{
"name":"greg","age":13
}
]
}
]
}
Run Code Online (Sandbox Code Playgroud)
struct userObject { var name: String var age: Int }
基本上是一个具有两种不同对象类型的 JSON 数组
{ "rank":12, "user": {userObject} }
Run Code Online (Sandbox Code Playgroud)
和一个“1”:数组 [userObjects]
struct data: Decodable {
rank: Int
user: user
1: [user] <-- this is one area Im stuck
}
Run Code Online (Sandbox Code Playgroud)
提前致谢
只是为了好玩:
首先,您需要用户的结构以及result数组中第一个和第二个字典的表示。键"1"被映射到one
struct User : Decodable {
let name : String
let age : Int
}
struct FirstDictionary : Decodable {
let rank : Int
let user : User
}
struct SecondDictionary : Decodable {
let one : [User]
private enum CodingKeys: String, CodingKey { case one = "1" }
}
Run Code Online (Sandbox Code Playgroud)
现在是棘手的部分:
resultasnestedUnkeyedContainer因为对象是一个数组。解码第二个字典并复制值。
struct UserData: Decodable {
let rank : Int
let user : User
let oneUsers : [User]
private enum CodingKeys: String, CodingKey { case result }
init(from decoder: Decoder) throws {
let container = try decoder.container(keyedBy: CodingKeys.self)
var arrayContainer = try container.nestedUnkeyedContainer(forKey: .result)
let firstDictionary = try arrayContainer.decode(FirstDictionary.self)
rank = firstDictionary.rank
user = firstDictionary.user
let secondDictionary = try arrayContainer.decode(SecondDictionary.self)
oneUsers = secondDictionary.one
}
}
Run Code Online (Sandbox Code Playgroud)如果此代码优于传统手册, JSONSerialization则是另一个问题。
| 归档时间: |
|
| 查看次数: |
4595 次 |
| 最近记录: |