SNV7
SNV7

Reputation: 2593

JSON returning null

I'm having a bit of trouble parsing some returned JSON. I'm fairly new to working with JSON. I'm trying to get the company name from the first JSON array element. I have a feeling that I'm confusing the use of NSMutabeArray and NSMutableDictionary. What I get is null. Any idea what I'm doing wrong?

NSString *url = @"http://www.google.com/finance/info?infotype=infoquoteall&q=C,JPM,AIG,AAPL";

NSData* data = [NSData dataWithContentsOfURL: 
                [NSURL URLWithString: url]];

//parse out the json data
NSError* error;
NSMutableArray* json = [NSJSONSerialization 
                      JSONObjectWithData:data //1

                      options:kNilOptions 
                      error:&error];

NSString* companyName = [[json objectAtIndex:0] objectForKey:@"name"] ; //Where I need some help

NSLog(@"we got %@", companyName);

Upvotes: 0

Views: 1791

Answers (2)

rdelmar
rdelmar

Reputation: 104082

You put in an error object, but you never looked at it. If you had, you would see that the data is corrupted:

Error Domain = NSCocoaErrorDomain Code = 3840 "The data couldn’t be read because it has been corrupted." (Invalid value around character 1.) UserInfo = 0x10030a8f0 { NSDebugDescription = Invalid value around character 1. }

I changed the value of the options parameter to see this error. I have

NSMutableArray* json = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers |NSJSONReadingAllowFragments error:&error];

Upvotes: 2

danh
danh

Reputation: 62686

Load that url in your browser. Looks like google is prefixing the JSON with //. I think NSJSONSerialization is tripping on that. Try this

NSRange range = NSMakeRange(2, [data length] - 3);
NSData *noPrefix = [data subdataWithRange:range];

Then send that to the parser.

Upvotes: 3

Related Questions