Dan Dan - 11 months ago 77
JSON Question

How to map JSON objects to Objective C classes?

I'm mapping JSON-formatted data from a web server to Objective C classes (NSManagedObjects modeled in Xcode, handled by Core Data). For each attribute of the Objective C class, I need to:

  1. Determine if the attribute's key exists in the JSON object,

  2. Determine if the value for that key is not null, and

  3. Pass the value to the modeled class instance if conditions 1 and 2 are true

Right now, I'm hard-coding this sequence for each of the attributes, so every attribute needs code like the following:

// dictObject is the JSON object converted into a NSDictionary,
// and person is the instance of the modeled class

if ([dictObject objectForKey:@"nameFirst"] &&
[dictObject objectForKey:@"nameFirst"] != [NSNull null]) {
person.nameFirst = [dictObject objectForKey:@"nameFirst"];

Besides requiring a lot of code to handle the various classes, this seems kludgy and brittle: any name change (or language localization) would cause the mapping to fail.

There has to be a better way... what am I missing?

Answer Source

There is a framework called RestKit that allows you to do just that. I have not tested it but it appears to be supported by an active company and available as open source: http://restkit.org/