使用Swift,AlamoFire和SwiftyJSON解析JSON数据

时间:2018-06-01 20:14:05

标签: ios json swift swifty-json

作为Swift的新手,我对如何解析从API获得的一些JSON数据感到困惑。我可以使用alamofire请求从api获取JSON数据。此时,我认为我有一个NSDictionary对象,JSON作为print(JSON)日志来控制大量的JSON。

if let result = response.result.value {
                            let JSON = result as! NSDictionary
                           print("this is what JSON is")
                            print(JSON)

我的问题是,首先,JSON实际上是一个NSDictionary。其次,我将如何访问JSON中的值。我是否需要先将其转换为数据对象。或者我如何获得嵌套数据。

例如,让我们说JSON看起来像这样:

 {
   "contact": {
   "first": "Bob",
   "second":"Jones"
    }
 }

我在SO上遇到了这个代码:

 let data = JSON(data: JSON)
 print("data\(data["contact"]["first"])")

但它会引发错误。我安装了swiftyJSON但很高兴有或没有它的解决方案。

提前感谢任何建议

3 个答案:

答案 0 :(得分:1)

你能试试吗

if let result = response.result.value as? [String:Any] {
   if let contact = result["contact"] as? [String:Any] {
      if let first = contact["first"] as?  String {
           print(first)
     }
   }
}

也是这个

let data = JSON(data: JSON)

给出错误,因为参数的类型应为Data而不是Dictionary

我希望从 Alamofire 请求返回数据,并使用Decodable解析它并转换为所需的模型

答案 1 :(得分:0)

尝试这个!

     if let data = response.data {
            let jsonData = JSON(data: data)
            print("data : \(jsonData["contact"]["first"].string)")
        }

答案 2 :(得分:0)

Swift4引入了令人惊叹的Codable协议。

使用Codable,我们可以通过编写很少的代码行来将JSONObject或PropertyList文件建模为等效的Struct或Classes。

有很多可用的在线工具可以从你的JSON创建模型类 (http://www.json4swift.com/

实施例

  let decoder = JSONDecoder()
  let parsedObject = try decoder.decode(Class.self, from: data) 

您可以在以下链接中找到详细信息: https://developer.apple.com/documentation/foundation/archives_and_serialization/encoding_and_decoding_custom_types