8.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 8.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(@"An ...

Get iOS 5 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.