tol*_*Thx 2 json decode ios swift alamofire
我有一个API,我也想得到请求.
但我尝试使用JSONDecoder转换数据类型,但我失败了.
我不知道如何解码这个Json像下面的数据.
我想把json ["response"]内容设置为我的User结构.
对我有什么建议吗?谢谢.
错误域= NSCocoaErrorDomain代码= 4865"没有与密钥ID("id")关联的值." UserInfo = {NSCodingPath =(),NSDebugDescription =没有与密钥ID("id")关联的值.}
这是JSON数据:
{
"status": "success",
"response": {
"id": "1130f1e48b608f79c5f350dd",
"name": "Jack",
},
"errors": ""
}
Run Code Online (Sandbox Code Playgroud)
enum RestfulAPI:String {
case userInfo = "http://www.mocky.io/v2/5a796fb92e00002a009a5a49"
func get(parameters:[String : Any]? = nil,success:@escaping (_ response : Data)->(), failure : @escaping (_ error : Error)->()){
let url = self.rawValue
Alamofire.request(url, method: .get, parameters: parameters, encoding: JSONEncoding.default, headers: nil).responseJSON { (response) in
switch response.result {
case .success:
if let data = response.data {
success(data)
}
case .failure(let error):
failure(error)
}
}
}
}
struct User: Decodable {
let id: String
let name: String
}
Run Code Online (Sandbox Code Playgroud)
用法:
RestfulAPI.userInfo.get(success: { data in
do {
let user = try JSONDecoder().decode(User.self, from: data)
print("==) ", user.id, user.name)
}catch let error as NSError{
print(error)
}
}) { (error) in
print(error)
}
Run Code Online (Sandbox Code Playgroud)
关键id不在您期望的水平上.这就是错误消息所说的.
键id和键name位于(子)字典中response.
所以你需要一个伞形结构
struct Root : Decodable {
let status: String
let response: User
}
struct User: Decodable {
let id: String
let name: String
}
Run Code Online (Sandbox Code Playgroud)
然后解码
let root = try JSONDecoder().decode(Root.self, from: data)
let user = root.response
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5408 次 |
| 最近记录: |