Swift:如何将带有Alamofilre或SwiftyJSON的JSON字符串转换为ObjectMapper?

时间:2015-06-21 10:13:13

标签: ios swift alamofire

我目前正在使用ObjectMapper为Swift将JSON对象从API映射到模型对象

但是我的restful api返回API看起来像这样:

appcompat-v7

在数据节点是数组我不能查找使用此代码的映射

{
       success: true,
       data: 
       [{  
          "stats":{  
             "numberOfYes":0,
             "numberOfNo":2,
             "progress":{  
                "done":false,
                "absolute":"2/100",
                "percent":2
             }
          },
          "quickStats":null,
          "uid":5,
          "name":"Flora",
          "imageArray":[  
             "http://s3.com/impr_5329beac79400000",
             "http://s3.com/impr_5329beac79400001"
          ],
          "metaData":{  
             "description":"Floral Midi Dress",
             "price":"40$"
          }
       }]

}

我该如何解决? 感谢

** 已修改 ** 我找到类似@tristan_him的解决方案

ObjectModel映射结构

let json = JSON(responseObject!)

for tests in json["impressions"][0] {
  let test = Mapper<myTests>().map(tests)
  println(test?.impressionID)
}

使用Alamofire回复进行映射

class Response: Mappable {
    var success: Bool?
    var data: [Data]?

    required init?(_ map: Map) {
        mapping(map)
    }

    func mapping(map: Map) {
        success <- map["success"]
        data <- map["data"]
    }
}

class Data: Mappable {
    var uid: Int?
    var name: String?
    // add other field which you want to map        

    required init?(_ map: Map) {
        mapping(map)
    }

    func mapping(map: Map) {
        uid <- map["uid"]
        name <- map["name"]
    }
}

1 个答案:

答案 0 :(得分:4)

您可以使用以下类结构映射上面的JSON:

class Response: Mappable {
    var success: Bool?
    var data: [Data]?

    required init?(_ map: Map) {
        mapping(map)
    }

    func mapping(map: Map) {
        success <- map["success"]
        data <- map["data"]
    }
}

class Data: Mappable {
    var uid: Int?
    var name: String?
    // add other field which you want to map        

    required init?(_ map: Map) {
        mapping(map)
    }

    func mapping(map: Map) {
        uid <- map["uid"]
        name <- map["name"]
    }
}

然后你可以按如下方式映射:

let response = Mapper<Response>().map(responseObject)
if let id = response?.data?[0].uid {
    println(id)
}