JSON parsing using NSJSONSerialization in iOS
ios, json, nsjsonserialization, objective-c, parsing
Solution
First of all in your `JSON` response `dictionary`, under the key 'RESPONSE' you have a array not a `dictionary` and that array contains `dictionary` object. So to extract username and email ID so as below
NSMutableDictionary *response = [[[json valueForKey:@"RESPONSE"] objectAtIndex:0]mutableCopy];
NSString *username = [response valueForKey:@"username"];
NSString *emailId = [response valueForKey:@"email"];
Problem
I am parsing a `JSON` in my code. But I am getting some unexpected issues while retrieving data of parsed `JSON`. So let me explain my problem. I have to parse following `JSON` data using xcode. This is what data to be parsed looks like while I hit same URL in browser: ``` { "RESPONSE":[ {"id":"20", "username":"john", "email":"abc@gmail.com", "phone":"1234567890", "location":"31.000,71.000"}], "STATUS":"OK", "MESSAGE":"Here will be message" } ``` My code to reach up to this `JSON` data is as follow: ``` NSData *data = [NSData dataWithContentsOfURL:finalurl]; NSError *error; NSDictionary *json = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error]; ``` If I print object `json` using `NSLog`, i.e. `NSLog(@"json: %@", [json description]);` it looks like: ``` json: { MESSAGE = "Here will be message"; RESPONSE =( { email = "abc@gmail.com"; id = 20; location = "31.000,71.000"; phone = 1234567890; username = john; } ); STATUS = OK; } ``` So, here I observed two things: Sequence of keys (or nodes) (`MESSAGE`, `RESPONSE` and `STATUS`) is changed as compared to web response above. The `RESPONSE` is get enclosed in `'(' & ')'` braces. Now if I separate out values for keys `MESSAGE` & `STATUS` and `NsLog` them, then they get printed as proper string. Like `msgStr:Here will be message` & `Status:OK` But if I separate out value for `RESPONSE` as a dictionary and again separating sub values of that dictionary like `email` and `username`, then I can't getting those as string. Here is the code so far I wrote: ``` NSMutableDictionary *response = [json valueForKey:@"RESPONSE"]; NSString *username = [response valueForKey:@"username"]; NSString *emailId = [response valueForKey:@"email"]; ``` If I print `username` and `emailId`, then they are not getting printed as normal string, instead it outputs as: ``` username:( john ) email:( abc@gmail.com ) ``` So my question is why it's not getting as a normal string? If I tried to use this variables further then they show value enclosed within `'(' & ')'` braces. Is this happening because of `NSJSONSerialization`?