0

我正在尝试将我在 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 将其作为“存储”键中的数组返回。我的问题是,可以说,我怎样才能循环通过“存储项目并使用他们的数据来制作一个只有一个标签的表格视图和一个包含所有其他信息的详细视图?

4

1 回答 1

1

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

薇尔成功!

于 2012-05-03T08:51:46.377 回答