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 )