【问题标题】:Getting JSON by using Alamofire and decode - Swift 4通过使用 Alamofire 和解码获取 JSON - Swift 4
【发布时间】:2023-04-02 09:42:01
【问题描述】:

我有一个 API,我也想获得请求。
但我尝试使用 JSONDecoder 转换数据类型,但失败了。
我不知道如何像下面的数据一样解码这个 Json。
我想采用 json["response"] 内容设置我的用户结构。
对我有什么建议吗? 谢谢。

错误域 = NSCocoaErrorDomain 代码 = 4865 “没有与键 ID (“id”) 关联的值。”用户信息={NSCodingPath=( ), NSDebugDescription=没有与键 id ("id") 关联的值。}

这是 JSON 数据:

{
"status": "success",
"response": {
"id": "1130f1e48b608f79c5f350dd",
"name": "Jack",
},
"errors": ""
}


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
}

用法:

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)
 }

【问题讨论】:

标签: ios json swift alamofire decode


【解决方案1】:

密钥id 不在您期望的级别。这就是错误消息的状态。
idname 位于键 response 的(子)字典中。

所以你需要一个伞形结构

struct Root : Decodable {
   let status: String
   let response: User
}

struct User: Decodable {
    let id: String
    let name: String
}

然后解码

let root = try JSONDecoder().decode(Root.self, from: data)
let user = root.response

【讨论】:

    猜你喜欢
    • 2018-06-28
    • 2019-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-05
    • 1970-01-01
    相关资源
    最近更新 更多