0

jsonなしで使用している現在のコードは次のとおりです。

parts = [NSArray arrayWithObjects:
            [[part alloc] initWithpartName:@"Part1" imageName:@"picture1.jpg"],
             [part alloc] initWithpartName:@"Part2" imageName:@"picture2.jpg"],
             [part alloc] initWithpartName:@"Part3" imageName:@"picture3.jpg"]
            nil];

私がフェッチするjsonは次のとおりです。

  [{"id":"1","case_name":"NZXT Phantom 
410","case_description":"","case_type":"ATX","case_color":"White","case_price":"99.99","case
_image":""},{"id":"2","case_name":"Thermaltake 
MK+","case_description":"","case_type":"ATX","case_color":"Black","case_price":"84.99","case
_image":""}

私はそれをフェッチするためにこれを使用します:

NSString *urlString = [NSString stringWithFormat:@"http://site.com/get/parts/part.php?part=case"];

        NSURL *url = [NSURL URLWithString:urlString];

        NSString *data = [NSData dataWithContentsOfURL:url];

質問:このjsonをこの配列に入れるにはどうすればよいですか?私はSBJsonを持っていて、これを使ってみました:

SBJsonParser *parser = [[SBJsonParser alloc] init];

        parts = [[parser objectWithString:data error:nil] copy];

色、説明、タイプなどの追加データを使用して解析する方法について誰かが私を修正できますか?

4

1 に答える 1

0

SBJSONまたはその他のJSONパーサーを使用してこのJSON文字列を解析すると、返されるのはNSArrayであり、配列の各項目はNSDictionaryです。探しているキー/値のペアは、それらの辞書内にあります。「パーツ」オブジェクトの配列を直接提供することはありません。これを手動で行うには、コードを作成する必要があります。

それがあなたがやろうとしていることである場合、コードは次のようになります。

NSMutableArray *result = [[NSMutableArray *alloc] init];
NSArray *jsonObj = [parser objectWithData:data];
[jsonObj enumerateObjectsUsingBlock:^(NSDictionary *dict, NSUInteger idx, BOOL *stop) {
    Part *part = [[part alloc] initWithPartName:[dict objectForKey:@"case_name"]
                                      imageName:[dict objectForKey:@"case_image"]];
    [result addObject:part];
}];

JSONからのデータを使用して入力するPartクラスにさらにフィールドがある場合は、またはdict objectForKey:などの適切なキー名の結果に基づいてそれらのフィールドを設定するコードを追加できます。idcase_description

于 2012-08-16T16:53:36.970 に答える