JSON数组和sorting

我有这个json数组,我在下面列出。 我想知道如何才能得到所有的string在“名称”键下,并放置在一个特定的数组中按名称的字母顺序sorting,然后根据名称中的第一个字母分割成更多的数组。 任何指导,以执行此将非常感激,谢谢。 我通过github和NSJSONserialization使用json工具包。

{ "proj_name": "Ant", "id": [ { "name": "David" }, { "name": "Aaron" } ] }, { "proj_name": "Dax", "id": [ { "name": "Adrian" }, { "name": "Dan" } ] } 

以下是select名称并按字母顺序sorting的示例。 用你的数据对象replaceresponseData。

 NSMutableArray *names = [[NSMutableArray alloc] init]; NSError* error; NSArray* json = [NSJSONSerialization JSONObjectWithData:responseData options:kNilOptions error:&error]; for (NSDictionary *proj in json) { NSArray *ids = [proj objectForKey: @"id"]; for (NSDictionary *name in ids) { [names addObject: [name objectForKey: @"name"]; } } NSArray *sortedNames = [names sortedArrayUsingSelector: @selector(localizedCaseInsensitiveCompare:)]; 

转到http://json.bloople.net/在这个链接,你可以看到你的JSON响应的结构。

从上面的回答中,我可以看到如下回应:

项目名称:达克斯

ID:0名字:阿德里安

  1 name : Dan 

所以你可以使用Apple的NSjsonserialization类。 不需要使用JSON套件。

 NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:[NSString stringWithFormat:@"Your URL"]]]; NSData *response = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil]; NSLog(@"url=%@",request); id jsonObject = [NSJSONSerialization JSONObjectWithData:response options:NSJSONReadingAllowFragments error:nil]; if ([jsonObject respondsToSelector:@selector(objectForKey:)]) { Nsstring *projectname=[jsonObject objectForKey:@"proj_name"]; NSArray *name_array=[jsonObject objectForKey:@"id"]; NSLog(@"projectname=%@",projectname); NSLog(@"name_array=%@",name_array); } 

假设你已经成功地将JSONparsing成一个NSArray,你可以简化一些事情:

 NSArray *names = [parsedArray valueForKeyPath:@"@distinctUnionOfArrays.id.name"]; 

names数组现在应该包含所有名称,并将其平铺到一个数组中。 为了sorting他们,你可以这样做:

 NSArray *sortedNames = [names sortedArrayUsingDescriptors:@[[NSSortDescriptor sortDescriptorWithKey:@"description" ascending:YES]]]; 

或者一次:

  NSArray *sortedNames = [[parsedArray valueForKeyPath:@"@distinctUnionOfArrays.id.name"] sortedArrayUsingDescriptors:@[[NSSortDescriptor sortDescriptorWithKey:@"description" ascending:YES]]]; 

sortedNames数组现在将包含:

 <__NSArrayI 0x713ac20>( Aaron, Adrian, Dan, David )