通过使用 Alamofire 和解码获取 JSON - Swift 4
Posted
技术标签:
【中文标题】通过使用 Alamofire 和解码获取 JSON - Swift 4【英文标题】:Getting JSON by using Alamofire and decode - Swift 4 【发布时间】:2018-07-16 07:07:13 【问题描述】:我有一个 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)
【问题讨论】:
错误说明你做错了什么,请阅读 使用这个库来创建你的 JSON 模型类并进行解析。 github.com/insanoid/SwiftyJSONAccelerator 但我使用的是 Swift 4 【参考方案1】:密钥id
不在您期望的级别。这就是错误消息的状态。
键 id
和 name
位于键 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
【讨论】:
以上是关于通过使用 Alamofire 和解码获取 JSON - Swift 4的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 AlamoFire 搜索 JSON API 和解码数组
使用 Struct 解码 JSON 响应的 Alamofire 错误