如何在swift iOS中为跟随JSON响应制作模型类

bas*_*ha 3 json ios swift

嗨,我是swift ios的初学者,我的要求是必须显示Json对表列表的响应我得到了来自web服务的响应,响应如下所示

我的要求是如何将模型类映射到Array以及如何在tableList中显示它们可以帮助我

JsonResponse: -

[{
  "_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"
  }
}]
Run Code Online (Sandbox Code Playgroud)

制图:

俱乐部:-

class Club { 

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

}
Run Code Online (Sandbox Code Playgroud)

地点:-

class Location {

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

}
Run Code Online (Sandbox Code Playgroud)

NSURlSession代码: -

class BackGroundPostCall: NSObject {

    var delegate:PostProtocol?

    func callPostService(url:String,params:NSDictionary){

        print("url is===>\(url)")

        let request = NSMutableURLRequest(URL: NSURL(string:url)!)

        let session = NSURLSession.sharedSession()
        request.HTTPMethod = "POST"

        //Note : Add the corresponding "Content-Type" and "Accept" header. In this example I had used the application/json.
        request.addValue("application/json", forHTTPHeaderField: "Content-Type")
        request.addValue("application/json", forHTTPHeaderField: "Accept")

        request.HTTPBody = try! NSJSONSerialization.dataWithJSONObject(params, options: [])

        let task = session.dataTaskWithRequest(request) { data, response, error in
            guard data != nil else {
                print("no data found: \(error)")
                return
            }

            do {
                if let json = try NSJSONSerialization.JSONObjectWithData(data!, options: []) as? NSArray {
                    print("Response: \(json)")
                } else {
                    let jsonStr = NSString(data: data!, encoding: NSUTF8StringEncoding)// No error thrown, but not NSDictionary
                    print("Error could not parse JSON: \(jsonStr)")
                }
            } catch let parseError {
                print(parseError)// Log the error thrown by `JSONObjectWithData`
                let jsonStr = NSString(data: data!, encoding: NSUTF8StringEncoding)
                print("Error could not parse JSON: '\(jsonStr)'")
            }
        }

        task.resume()
    }
}
Run Code Online (Sandbox Code Playgroud)

Ale*_*nov 5

对于映射,您可以使用Alamofire的扩展ObjectMapper.

例如:

[{
"_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"
    }
}]
Run Code Online (Sandbox Code Playgroud)

和mapper类:

import ObjectMapper

class Location: Mappable {
    var address: String?
    var city: String?

    required init?(map: Map){

    }

    func mapping(map: Map) {
        address <- map["address"]
        city <- map["city"]
    }
}

class Club: Mappable {
    var id: String?
    var imageUrl: Int?
    var name: String?
    var hasVip: Bool = false
    var location: Location?

    required init?(map: Map){

    }

    func mapping(map: Map) {
        id <- map["_id"]
        imageUrl <- map["imageUrl"]
        name <- map["name"]
        hasVip <- map["hasVippler"]
        location <- map["location"]
    }
}
Run Code Online (Sandbox Code Playgroud)

而这种方式使用起来非常灵活和透明.

https://github.com/Alamofire/Alamofire https://github.com/tristanhimmelman/AlamofireObjectMapper

使用示例:

Alamofire.request(URL).responseArray { (response: DataResponse<[Club]>) in

    let clubs = response.result.value

    if let clubs = clubs {
        for club in clubs {
            print(club.name)
            print(club.location.city)           
        }
    }
}
Run Code Online (Sandbox Code Playgroud)


小智 5

您可以使用此网址制作模型类:http : //www.jsoncafe.com/

打开此链接并将您的 json 放在 JSON 选项卡中,然后选择您想要的任何代码模板。如果您想要其他明智的选择,您还可以添加前缀类名和根类名。最后点击生成按钮,你的 json 类就准备好了。!!