我正在尝试将 NSDictonary 中的 JSON 数据分割成我可以使用的更小的部分,但是我似乎被卡住了。
我从我使用的 API 接收的数据是当前的公共交通数据。这是我收到的数据:
{
Storingen = {
Gepland = {
Storing = {
Advies = "U kunt gebruikmaken van de omreisroute of de bussen reis tussen Alphen a/d Rijn en Gouda met de NS-bus reis vanaf zondag 29 april van Alphen a/d Rijn naar Gouda met de trein via Woerden reis tussen Leiden Centraal en Gouda via Den Haag Centraal";
Bericht = "
\n <p>
\n <b>Wanneer: van zaterdag 28 april tot en met zondag 6 mei</b>
\n <br/>
\n <b>Oorzaak: door geplande werkzaamheden</b>
\n <br/>
\n <b>Advies: U kunt gebruikmaken van de omreisroute of de bussen</b>
\n <br/>\treis tussen Alphen a/d Rijn en Gouda met de NS-bus<br/>\treis vanaf zondag 29 april van Alphen a/d Rijn naar Gouda met de trein via Woerden<br/>\treis tussen Leiden Centraal en Gouda via Den Haag Centraal<br/><br/><b>Extra Reistijd: een kwartier tot een half uur</b><br/></p>
\n ";
Oorzaak = "door geplande werkzaamheden";
Periode = "van zaterdag 28 april tot en met zondag 6 mei";
Traject = "Alphen a/d Rijn-Gouda";
Vertraging = "een kwartier tot een half uur";
id = "2012_apn_gd_28apr_6mei";
};
};
Ongepland = "";
};
}
到目前为止我有这个:
-(void)loadJson
{
dispatch_async(kBgQueue, ^{
NSData* data = [NSData dataWithContentsOfURL:kJsonURL];
[self performSelectorOnMainThread:@selector(fetchedData:) withObject:data waitUntilDone:YES];
});
}
- (void)fetchedData:(NSData *)responseData {
NSError* error;
NSDictionary *json = [NSJSONSerialization JSONObjectWithData:responseData options:kNilOptions error:&error];
NSDictionary *storingen = [json objectForKey:@"Storingen"];
NSDictionary *gepland = [storingen objectForKey:@"Gepland"];
NSLog(@"%@", json);
}
目前API仅返回一个“Gepland”,计划中的“Storing”,故障。但在保存的时候可以有更多的功能。 API 将其作为数组返回到“Storing”键中。我的问题是,我怎样才能循环遍历“存储”项并使用它们的数据制作一个只有一个标签的表格视图和一个包含所有其他信息的详细视图?
使用可以使用字典中的数据作为你表中的数据源。我想你会得到一个带有 NSDictionaries 的 NSArray 。所以它应该看起来像这样:
NSArray *storingen = [json objectForKey:@"Storingen"];
for (NSDictionary *storing in storingen ){
NSString *advies = [storing objectForKey:@"Advies"];
}
然而,JSON 和通用传递器的烦人之处在于,如果只有 1 次中断(Een 存储是一次中断),您将得到一个 NSDictionary,否则如果有多个中断,您将得到一个 NSArray。你可以这样解决:
- (void)fetchedData:(NSData *)responseData {
NSError* error;
NSDictionary *json = [NSJSONSerialization JSONObjectWithData:responseData options:kNilOptions error:&error];
id storingen = [json objectForKey:@"Storingen"];
NSDictionary *gepland = [storingen objectForKey:@"Gepland"];
NSMutableArray *result = [[NSMutableArray alloc] init];
if ([storingen isKindOfClass:[NSArray class]]) {
result = storingen;
}
else {
[result addObject:storingen];
}
}
现在, storageen 将始终是一个数组,您可以使用该数组将其显示在 UITableView 中,例如
成功!