Where JSON_CATEGORY_DATA_URL_STRING
is my feed URL, which returns fine as:
[
{
"group":"For Sale",
"code":"SSSS"
},
{
"group":"For Sale",
"category":"Wanted",
"code":"SWNT"
}
]
I cannot seem to get a nice NSDictionary
(or NSArray
) out of the following code:
+ (NSDictionary *)downloadJSON
{
NSDictionary *json_string;
NSString *dataURL = [NSString stringWithFormat:@"%@", JSON_CATEGORY_DATA_URL_STRING];
NSLog(@"%@",dataURL);
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:dataURL]];
NSData *response = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
json_string = [[[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding]autorelease];
NSDictionary *json_dict = (NSDictionary *)json_string;
NSLog(@"json_dict\n%@",json_dict);
NSLog(@"json_string\n%@",json_string);
return json_string;
}
I've read many posts on this, but am not getting it.
You need to use JSON parser. here is the edited code
this should be the code to get the NSDictionary. but you json string is an array so instead use .
Edit: you need to use JSON.framework to call JSONValue method.
also you need to return
json_dict
instead ofjson_string
asjson_string
is ofNSString
type and notNSDictionary
orNSArray
.and dont autorelease it, as it is your class variable
You can't just cast a string as a dictionary and expect it to parse the JSON. You must use a JSON parsing library to take that string and convert it into a dictionary.
create method to fetchjson data.Pass your url in urlwithstring.
call fetchjsonmethod in anywhere.
[NSThread detachNewThreadSelector:@selector(fetchdata) toTarget:self withObject:nil];
With IOS5 you can use NSJSONSerialization for serializing the JSON.
Hope this help you.
I made a class that makes this task easier. It uses iOS 5's NSJSONSerialization. Clone it from github here.