2

以下に概説するこのjson配列があります。「name」キーの下にあるすべての文字列のみを取得し、特定の配列に配置して名前のアルファベット順に並べ替え、後で名前の最初の文字に従ってさらに配列に分割する方法を知りたいです。これを実行するためのガイドは大歓迎です、ありがとう。私は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応答の構造を確認できます。

上記の応答から、私は次のように応答を見ることができます:

プロジェクト名:Dax

id:0名前:エイドリアン

  1  name : Dan

NSjsonserializationしたがって、Appleのクラスを使用できます。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 に答える