JSONArray to Object Array manual mapping without creating wrapper object

28 views
Skip to first unread message

Prateek Grover

unread,
Jul 10, 2016, 7:25:45 AM7/10/16
to RestKit
Hey,

I am having a trouble mapping a json array response to object array manually, as in, without any network requests. Here is what I am trying to do:

Person class and mapping:

class Person: NSObject {
   
   
//name
   
var name:String!
   
   
//number
   
var number:NSNumber = NSNumber(longLong: 0)
}

class PersonRKObjectMapper{
   
   
var mapping:RKObjectMapping!
   
   
static let sharedInstance = PersonRKObjectMapper()
   
   
private init(){
       
       
self.mapping = RKObjectMapping(forClass: Person.self)
       
       
self.mapping.addAttributeMappingsFromDictionary(["name":"name","number":"number"])
   
}
}


TravelGroup wrapper class:

class TravelGroup: NSObject {

   
var passengers:[Person]!
   
   
//test
   
var test:String!
   
}

class TravelGroupRKObjectMapper{
   
   
var mapping:RKObjectMapping!
   
   
static let sharedInstance = TravelGroupRKObjectMapper()
   
   
private init(){
       
       
self.mapping = RKObjectMapping(forClass: TravelGroup.self)
       
       
self.mapping.addAttributeMappingsFromDictionary(["test" : "test"])
       
       
self.mapping.addPropertyMapping(RKRelationshipMapping(fromKeyPath: "psgrs", toKeyPath: "passengers", withMapping: PersonRKObjectMapper.sharedInstance.mapping))
   
}
}



Mapping operation:

        let JSONString = "[{\"name\": \"The name\", \"number\": 12345},{\"name\": \"The name\", \"number\": 12345}]"
       
        let
MIMEType = "application/json"
       
        let data
:NSData = JSONString.dataUsingEncoding(NSUTF8StringEncoding)!
       
       
var personList = [Person]()
       
       
do{
            let personObject
:AnyObject = try RKMIMETypeSerialization.objectFromData(data, MIMEType: MIMEType)
           
            let mappingDictionary
:NSDictionary = [NSNull():PersonRKObjectMapper.sharedInstance.mapping]
           
            let mapper
:RKMapperOperation = RKMapperOperation(representation: personObject, mappingsDictionary: mappingDictionary as [NSObject : AnyObject])
           
            mapper
.targetObject = personList
           
           
do{
               
try mapper.execute()
           
}catch{
               
print("error here")
           
}

       
}catch{
           
print("error")
       
}
       
       
print(personList)

I am getting the desired answer, but I was just wondering, how would I do this without the wrapper class. Also, sometimes, NSNull() causes Objective-C bridge errors which causes crashes.

Thanks

Prateek Grover

unread,
Jul 10, 2016, 8:15:43 AM7/10/16
to RestKit
It is TravelGroupRKObjectMapper.sharedInstance.mapping not PersonRKObjectMapper.sharedInstance.mapping

Also, I have added "psgrs" just to be able to map the object, otherwise, I want to map only the JSONArray
Reply all
Reply to author
Forward
0 new messages