将JSON供稿转换为NSDictionary

JSON_CATEGORY_DATA_URL_STRING是我的供稿url,它可以正常返回:

 [ { "group":"For Sale", "code":"SSSS" }, { "group":"For Sale", "category":"Wanted", "code":"SWNT" } ] 

我似乎无法得到一个很好的NSDictionary (或NSArray )以下代码:

 + (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; } 

我已经阅读了许多文章,但没有得到它。

使用IOS5,您可以使用NSJSONSerialization来序列化JSON。

 NSDictionary *dictionary = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error]; 

希望这对你有所帮助。

你不能只将string转换成字典,并期望它parsingJSON。 您必须使用JSONparsing库来获取该string并将其转换为字典。

我做了一个让这个任务更容易的课程。 它使用iOS 5的NSJSONSerialization。 从github克隆它在这里 。

您需要使用JSONparsing器。 这里是编辑的代码

 + (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]; //JSONValue is a function that will return the appropriate object like dictionary or array depending on your json string. NSDictionary *json_dict = [json_string JSONValue]; NSLog(@"json_dict\n%@",json_dict); NSLog(@"json_string\n%@",json_string); return json_dict; } 

这应该是获取NSDictionary的代码。 但是你的jsonstring是一个数组,所以改为使用。

 + (NSArray *)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]; NSArray *json_dict = [json_string JSONValue]; NSLog(@"json_dict\n%@",json_dict); NSLog(@"json_string\n%@",json_string); return json_dict; } 

编辑:你需要使用JSON.framework来调用JSONValue方法。
也需要返回json_dict而不是json_string因为json_stringNSStringtypes的,而不是NSDictionaryNSArray
不要autorelease它,因为它是你的类variables

创build方法来获取数据。在urlwithstring中通过你的url。

 -(void)fetchjsondata { NSString *login= [[NSString stringWithFormat:@"your url string"]stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; NSLog(@"----%@", login); NSURL *url = [NSURL URLWithString:[login stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]]; //-- Get request and response though URL NSMutableURLRequest *request = [[NSMutableURLRequest alloc]initWithURL:url]; [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) { dispatch_async(dispatch_get_main_queue(), ^{ if (data) { dic_property= [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil]; NSLog(@"%@", dic_property); NSLog(@"counts=%d",[[dic_property objectForKey:@"Data"]count]); } else { NSLog(@"network error, %@", [error localizedFailureReason]); } }); }]; } 

在任何地方调用fetchjson方法。

[NSThread detachNewThreadSelector:@selector(fetchdata)toTarget:self withObject:nil];