将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_string
是NSString
types的,而不是NSDictionary
或NSArray
。
不要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];