2012-08-16 30 views
0

我我沒有JSON使用當前的代碼是:JSON來的NSArray在Xcode

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]; 

能有人糾正我,我怎麼跟喜歡的顏色,說明,類型

回答

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數據來填充,那麼您可以添加代碼,根據dict objectForKey:的結果和相應的鍵名稱設置這些字段,例如idcase_description

+1

爲了更加一般而又更加精確,從解析器中得到的是JSON字符串在Objective-C對象中的精確表示。如果JSON的最外層「層」是一個數組,則會得到一個數組。如果最外面的「圖層」是一本字典,你會得到一本字典。 – 2012-08-16 17:02:21

+0

因此,我寫了一個類「Part」,但是我將該零件定義爲 – kezi 2012-08-16 18:00:16

+0

@kdogisthebest - NSObject。然後,當你返回對象時,測試它是一個NSArray還是一個NSDictionary。 – 2012-08-16 18:11:24