Swift: how to convert JSON string using Alamofilre or SwiftyJSON to ObjectMapper?

I am currently using ObjectMapper for Swift to map JSON object from API to Object model

but my return api return API looks like this:

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

}

      

There is an array in the node data, I cannot look at the mapping with this code

let json = JSON(responseObject!)

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

      

How do I fix it? Thanks to

** Edited ** I found a solution similar to @tristan_him

ObjectModel display structure

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

      

Mapping with Alamofire's answer

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

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

      

+3


source to share


1 answer


You can map the JSON above using the following class structure:

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

      



Then you can display it like this:

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

      

+4


source







All Articles