2

我有这个我在下面概述的 json 数组。我想知道如何仅获取“名称”键下的所有字符串并将其放置在某个数组中,按名称按字母顺序排序,然后根据名称中的第一个字母拆分为更多数组。任何执行此操作的指南将不胜感激,谢谢。我正在通过 github 和 NSJSONserialization 使用 json 工具包。

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

3 回答 3

3

转到http://json.bloople.net/在此链接中,您可以看到 JSON 响应的结构。

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

项目名称:达克斯

id : 0 名称 : 阿德里安

  1  name : Dan

因此,您可以使用NSjsonserializationApple 的课程。无需使用 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);
    }
于 2013-01-30T10:20:22.433 回答
3

这是仅选择名称并按字母顺序排序的示例。将 responseData 替换为您的数据对象。

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:)];
于 2013-01-30T10:31:01.137 回答
0

假设您已经成功地将 JSON 解析为 NSArray,您可以大大简化事情:

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

names 数组现在应该包含所有扁平化为单个数组的名称。要对它们进行排序,您可以执行以下操作:

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
)
于 2013-01-30T16:36:55.473 回答