9.10. Deserializing JSON into Arrays and Dictionaries

Problem

You have JSON data and you want to deserialize it into a dictionary or an array.

Solution

Use the JSONObjectWithData:options:error: method of the NSJSONSerialization class.

Discussion

If you already have serialized your dictionary or array into a JSON object (encapsulated inside an instance of NSData, see Recipe 9.9), you should be able to deserialize them back into a dictionary or an array, using the JSONObjectWithData:options:error: method of the NSJSONSerialization class. The object that is returned back by this method will either be a dictionary or an array, depending on the data that we pass to it. Here is an example:

/* Now try to deserialize the JSON object into a dictionary */
error = nil;
id jsonObject = [NSJSONSerialization
                 JSONObjectWithData:jsonData
                 options:NSJSONReadingAllowFragments
                 error:&error];

if (jsonObject != nil &&
    error == nil){

  NSLog(@"Successfully deserialized...");

  if ([jsonObject isKindOfClass:[NSDictionary class]]){

    NSDictionary *deserializedDictionary = (NSDictionary *)jsonObject;
    NSLog(@"Deserialized JSON Dictionary = %@", deserializedDictionary);

  }
  else if ([jsonObject isKindOfClass:[NSArray class]]){

    NSArray *deserializedArray = (NSArray *)jsonObject;
    NSLog(@"Deserialized JSON Array = %@", deserializedArray);

  }  else {
    /* Some other object was returned. We don't know how to deal
     with this situation, as the deserializer returns only dictionaries
     or arrays */
  }

}
else if (error != nil){
  NSLog

Get iOS 6 Programming Cookbook now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.