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

问题描述:

我目前使用 ObjectMapper斯威夫特用于映射JSON对象从API到模型对象

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

但我的RESTful API返回的API看起来像这样

{ 
     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$" 
      } 
     }] 

} 

在数据节点阵列我不能看直到使用此代码映射

let json = JSON(responseObject!) 

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

我该如何解决? 由于

** 编辑 ** 我发现溶液类似@tristan_him

ObjectModel映射结构

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"] 
    } 
} 

映射与Alamofire响应

let response: Response = Mapper<Response>().map(responseObject)! 

for item in response.data! { 
    let dataModel: Data = item 
    println(dataModel.name) 
} 

您可以使用下面的类结构映射的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) 
} 
+0

谢谢@triton_him – Thunderbird

+0

@tristan_him,我们可以把“回应'和'Data'类在两个不同的Response.swift和Data.Swift文件中,或者我们需要将它们保存在单个.swift文件中? –

+0

@AshishPisey,它应该以任何方式工作。这取决于你以及你想如何构建你的项目。 –