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

需要帮助使用 Alamofire 使用 Swift 解析 JSON

JSON数据未在swift3中使用Alamofire进行解析

Json 解析 Swift 3 Alamofire

Swift Alamofire JSON 解析