Swift Alamofire 迁移解析 JSON
Posted
技术标签:
【中文标题】Swift Alamofire 迁移解析 JSON【英文标题】:Swift Alamofire migration parsing JSON 【发布时间】:2017-06-12 21:22:48 【问题描述】:在迁移到最新版本时,我发现很难在 Swift 3 中使用 Alamofire 4 解析从 JSON 中获取和打印姓名、年龄和出生日期等字段。
JSON 格式
"SetValues":
"data":
[
"Name": yyyyy ,
"Age": 13,
"DOB": "2017-06-08",
"Name": xxxx ,
"Age": 33,
"DOB": "2015-06-08",
]
我试过了
Alamofire.request(url!,
method: .post,
parameters: nil,
encoding: JSONEncoding.default,
headers: headers)
.responseJSON response in
let datamsg = jsonmsg?["SetValues"] as? [String : Any]
let dataset = datamsg?["data"] as? [String : Any]
let setValues = datamsg?["data"]
print (setValues[0]["Name"] as Any)
【问题讨论】:
显示你迄今为止尝试过的内容 我试过 Alamofire.request(url!, method: .post, parameters: nil, encoding: JSONEncoding.default, headers: headers) .responseJSON response in let datamsg = jsonmsg?["SetValues" ] 作为? [String : Any] 让 dataset = datamsg?["data"] as? [String : Any] let setValues = datamsg?["data"] print (setValues[0]["assetDateId"] as Any); 把它放在问题中。 那么当你运行你的代码时会发生什么?jsonmsg
是什么?它没有在您的代码中定义。
dataset
是一个数组(字典),而不是字典,所以你不能做as? [String : Any]
,它至少应该是as? [Any]
,在你的情况下是as? [[String: Any]]
。
【参考方案1】:
问题出在这一行
let dataset = datamsg?["data"] as? [String : Any]
从 JSON 响应字符串中可以看出,它应该如下所示
let dataset = datamsg?["data"] as? [[String : Any]]
let name = dataset?[0]["Name"] as? String
【讨论】:
感谢大家的时间和努力。我最终得到的解决方案是:Any 成员的类型不能带下标,所以如果我需要索引值来遍历解析的 json,我必须将初始 Json 响应转换为字典然后找到数据部分并用作? [字符串:任意]。以上是关于Swift Alamofire 迁移解析 JSON的主要内容,如果未能解决你的问题,请参考以下文章
使用未解析的标识符 'json' (Swift 3) (Alamofire)
需要帮助使用 Alamofire 使用 Swift 解析 JSON