json - 将 json 集合响应映射到 swift 对象类的简单方法

标签 json swift alamofire

我尝试了很多库,Alamofire、JsonHelper、ObjectMapper 等...,但不幸的是,我无法将 json 集合响应映射到对象类中。 我正在使用 swift 1.2 和 xcode 6.3 开发一个 IOS 8 应用程序,我的模型的两个类是:

Club.swift

class Club { 

    var id: String = ""
    var name: String = ""
    var imageUrl: String = ""
    var hasVip: Bool = false
    var desc: String = ""
    var location: [Location] = []

}

位置.swift

class Location {

    var country: String = ""
    var city: String = ""
    var address: String = ""
    var zip: String = ""
    var underground: [String] = []

}

我还有另一个类要向我的 API 请求:

apliClient.swift

class ApiClient {

    var clubs = [Club]?()


    func getList(completionHandler: ([JSON]) -> ()) {
        let URL = NSURL(string: "https://api.com/v1/clubs")
        let mutableURLRequest = NSMutableURLRequest(URL: URL!)

        mutableURLRequest.setValue("Content-Type", forHTTPHeaderField: "application/json")
        mutableURLRequest.HTTPMethod = "GET"
        mutableURLRequest.setValue("Bearer R01.iNsG3xjv/r1LDkhkGOANPv53xqUFDkPM0en5LIDxx875fBjdUZLn1jtUlKVJqVjsNwDe1Oqu2WuzjpaYbiWWhw==", forHTTPHeaderField: "Authorization")

        let manager = Alamofire.Manager.sharedInstance
        let request = manager.request(mutableURLRequest)

        request.responseJSON { (request, response, json , error) in
            if (json != nil){
                var jsonObj = JSON(json!)
                if let data = jsonObj["hits"].arrayValue as [JSON]?{
                    completionHandler(data)
                }
            }
        }
    }
}

我认为,有一种简单的方法可以快速映射对象。我想知道,如何返回转换为[Club]对象的completionHandler(data)?

让 data = jsonObj["hits"].arrayValue 为 [JSON]?

[{
  "_id" : "5470def9e0c0be27780121d7",
  "imageUrl" : "https:\/\/s3-eu-west-1.amazonaws.com\/api-static\/clubs\/5470def9e0c0be27780121d7_180.png",
  "name" : "Mondo",
  "hasVip" : false,
  "location" : {
    "city" : "Madrid"
  }
}, {
  "_id" : "540b2ff281b30f3504a1c72f",
  "imageUrl" : "https:\/\/s3-eu-west-1.amazonaws.com\/api-static\/clubs\/540b2ff281b30f3504a1c72f_180.png",
  "name" : "Teatro Kapital",
  "hasVippler" : false,
  "location" : {
    "address" : "Atocha, 125",
    "city" : "Madrid"
  }
}, {
  "_id" : "540cd44581b30f3504a1c73b",
  "imageUrl" : "https:\/\/s3-eu-west-1.amazonaws.com\/api-static\/clubs\/540cd44581b30f3504a1c73b_180.png",
  "name" : "Charada",
  "hasVippler" : false,
  "location" : {
    "address" : "La Bola, 13",
    "city" : "Madrid"
  }
}]

最佳答案

您可以使用 ObjectMapper 来执行此操作您上面提到的图书馆。只需创建 Club类并确保它实现 Mappable协议(protocol)。然后就可以使用ObjectMapper来映射数据了:

let clubs = Mapper<Club>().mapArray(JSONString)

全面披露:我是 ObjectMapper 的作者。

关于json - 将 json 集合响应映射到 swift 对象类的简单方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29884827/

相关文章:

asp.net - 如何从 ASP.NET Web 服务实现自定义 JSON 序列化?

ruby-on-rails - 覆盖 as_json 或 to_json 模型类名

swift - Xcode6 Beta6 - Interface Builder 文件中的未知类 SCNView

json - Swift:如何从 JSON 数据读取 JSON 数据

swift - 使用 Alamofire 的同步请求

json - 如何使用 'For Each' 在 LogicApp 中检索和更新 JSON 值

java - 如何使用java注释重命名j​​son对象名称?

ios - 快速调整字体大小以适应静态 UITextView 的宽度和高度

arrays - swift 3 数组太长,太复杂,无法解决

ios - 删除以前添加的库时出现问题