Ajeet Ajeet - 5 months ago 14
JSON Question

JSON Parsing in iOS 7

I am creating an app for as existing website. They currently has the JSON in the following format :

[

{
"id": "value",
"array": "[{\"id\" : \"value\"} , {\"id\" : \"value\"}]"
},
{
"id": "value",
"array": "[{\"id\" : \"value\"},{\"id\" : \"value\"}]"
}
]


which they parse after escaping the \ character using Javascript.

My problem is when i parse it in iOS using the following command :

NSArray *result = [NSJSONSerialization JSONObjectWithData:jsonData options:kNilOptions error:&localError];


and do this :

NSArray *Array = [result valueForKey:@"array"];


Instead of an
Array
I got
NSMutableString
object.


  • The website is already in production so I just cant ask them to change their existing structure to return a proper
    JSON
    object. It would be a lot of work for them.

  • So, until they change the underlying stucture, is there any way i can make it work in
    iOS
    like they do with
    javascript
    on their
    website
    ?



Any help/suggestion would be very helpful to me.

Rob Rob
Answer

The correct JSON should presumably look something like:

[
    {
        "id": "value",
        "array": [{"id": "value"},{"id": "value"}]
    },
    {
        "id": "value",
        "array": [{"id": "value"},{"id": "value"}]
    }
]

But, if you're stuck this the format provided in your question, you need to make the dictionary mutable with NSJSONReadingMutableContainers and then call NSJSONSerialization again for each of those array entries:

NSMutableArray *array = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:&error];
if (error)
    NSLog(@"JSONObjectWithData error: %@", error);

for (NSMutableDictionary *dictionary in array)
{
    NSString *arrayString = dictionary[@"array"];
    if (arrayString)
    {
        NSData *data = [arrayString dataUsingEncoding:NSUTF8StringEncoding];
        NSError *error = nil;
        dictionary[@"array"] = [NSJSONSerialization JSONObjectWithData:data options:0 error:&error];
        if (error)
            NSLog(@"JSONObjectWithData for array error: %@", error);
    }
}