NSDictionary从API分割数据

时间:2012-05-03 08:40:22

标签: objective-c ios xcode api

我正在尝试将我在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 = "";
    };
}

Sofar我有这个:

-(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”,计划,“存储”,故障。但是在节省时间可以有更多的功能。 api将其作为“存储”键中的数组返回。我的问题是,我怎么能循环通过“存储项目并使用他们的数据来制作只有一个标签的表格视图和包含所有其他信息的详细视图?”

1 个答案:

答案 0 :(得分:1)

使用可以使用字典中的数据作为表中的数据源。我认为你会得到的是NSArray和NSDictionaries。所以看起来应该是这样的:

NSArray *storingen = [json objectForKey:@"Storingen"];

for (NSDictionary *storing in storingen ){
     NSString *advies = [storing objectForKey:@"Advies"];
}

然而,使用JSON和普通pasers的烦人部分是,如果只有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];
    }
}

现在,storingen将永远是一个数组,您可以使用该数组在UITableView中显示它。

Veel成功!