-1

重複の可能性:
NSJSONSerialization の使用方法

iPhoneアプリケーションで自分のWebサイトのWebサービスを使用するためにテストしています。問題のある JSON は次のとおりです。

[
    {
        "name": "Jason1",
        "age": 20
    },
    {
        "name": "Jason2",
        "age": 40
    },
    {
        "name": "Jason3",
        "age": 60
    }
]

そして私のコード:

   NSData *jasonData = [NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://localhost:3000/all_personal_information.json"]];
    NSDictionary *json = nil;
    if (jasonData) {
        json = [NSJSONSerialization JSONObjectWithData:jasonData options:kNilOptions error:nil];
    }

コードは正常に動作し、 と を使用し{"name":"jason","age":20} て値を取得できますjson[@"name"]json[@"age"]

しかし、問題のある JSON から値を取得する方法がわかりません。[json enumerateKeysAndObjectsWithOptions]辞書を横断するために使ってみまし た。しかし、私はエラーが発生します:

enumerateKeysAndObjectsWithOptions:usingBlock:]: 認識されないセレクターがインスタンス 0x89b2490 に送信されました

しかし、[json description]コンソールにログインすると、完全な JSON を取得できます。

4

3 に答える 3

2

配列を取得している間に辞書を作成しています。次のことを行うと、機能するはずです。

id json = nil;
if (jasonData)
{
    json = [NSJSONSerialization JSONObjectWithData:jasonData options:kNilOptions error:nil];
}

if ([json isKindOfClass:NSArray.class])
{
    for (id personDef in json)
    {
        if ([personDef isKindOfClass:NSDictionary.class])
        {
            NSDictionary * dict = (NSDictionary *) moduleDef;

            NSString * name  = [dict objectForKey:@"name" withClass:NSString.class];

            NSLog(@"Person: @%", name);
        }
    }
}

ここでは、オブジェクトが期待どおりのものであるかどうかをさらに確認します。そうでない場合は、(適切な)エラー処理を追加する必要があります。

于 2012-10-06T07:35:42.523 に答える
2

配列に入れてください..たとえば

NSData *jasonData = [NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://localhost:3000/all_personal_information.json"]];
NSDictionary *json = nil;
if (jasonData) {
    NSError *e = nil;
NSArray *jsonArray = [NSJSONSerialization JSONObjectWithData:jasonData options:NSJSONReadingMutableContainers error: &e];
}

配列にはあなたが含まれます

{
 "name": "Jason1",
 "age": 20
}

個々のインデックスなど。その中の値を取得したい場合は、以下のメソッドを使用して値を取得できます

NSDictionary *userName = [jsonArray objectAtIndex:1];
NSString *stringName = [userName valueForKey:@"name"];
于 2012-10-06T07:47:58.810 に答える
1

それはあなたを助けるでしょう。

     NSMutableDictionary *CompaintsAry =[NSJSONSerialization JSONObjectWithData:respo options:kNilOptions error:&error];
     NSMutableArray *tempary =[[NSMutableArray alloc]init];
    for (int i=0;i < [CompaintsAry count];i++) {
    CfResultFatch *rs = [[CfResultFatch alloc] initWithName:[[CompaintsAry obj ectAtIndex:i]objectForKey:@"Name"]
                                                     cipd :[[CompaintsAry objectAtIndex:i] objectForKey:@"Age"]];

    [tempary addObject:rs];
}
cfComlaintsLists = [[NSMutableArray alloc] initWithArray:tempary];
SelectComplain = [[NSMutableArray alloc] initWithCapacity:[cfComlaintsLists count]]; 
[chiftab reloadData];
于 2012-10-06T07:41:53.900 に答える