gpt4 book ai didi

objective-c - NSDictionary 从 API 中分割数据

转载 作者:行者123 更新时间:2023-11-29 04:40:47 24 4
gpt4 key购买 nike

我试图将 NSDictonary 中的 json 数据分割成我可以使用的更小的部分,但我似乎被卡住了。

我从我使用的 API 接收的数据是当前的公共(public)交通数据。这是我收到的数据:

{
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”键中。我的问题是,我怎样才能循环遍历“存储项目并使用其数据来创建一个只有一个标签的表格 View 和一个包含所有其他信息的详细 View ?

最佳答案

使用可以使用字典中的数据作为表中的数据源。我想你会得到一个带有 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 中,例如

成功!

关于objective-c - NSDictionary 从 API 中分割数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10427865/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com