0

我已下载我的 JSON 数据,但无法访问特定对象。从我的 JSON 数据中,我试图valuevariableName = "Elevation of reservoir water surface above datum, ft";

这是我的代码:

- (void)viewWillAppear:(BOOL)animated {
[super viewDidAppear:animated];

NSURL *url = [NSURL URLWithString:@"http://waterservices.usgs.gov/nwis/iv/?sites=02334400&period=P7D&format=json"]; 

NSData *jsonData = [NSData dataWithContentsOfURL:url];
if (jsonData != nil) {
    NSError *error = nil;

    id result = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableContainers error: &error];

    if (error == nil)
        NSLog(@"%@", result);
}
}

编辑:打印输出的数据太多,但这是我在 JS 中访问对象的方式。我似乎无法编写在 Obj-C 中执行相同操作的 for 语句:

 var d = JSON.parse(responseText);
    for (var i = 0; i < d.value.timeSeries.length; i++) {
        if (d.value.timeSeries[i].variable.variableName == 'Elevation of reservoir      water surface above datum, ft') {
            var result = d.value.timeSeries[i].values[0].value[d.value.timeSeries[i].values[0].value.length - 1];
            console.log(result);
        }
4

2 回答 2

2

这很丑陋,但它应该给你一些东西开始:

NSArray *timeSeries = [JSON valueForKeyPath:@"value.timeSeries"];

[timeSeries enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
    NSString *variableName = [obj valueForKeyPath:@"variable.variableName"];

    if ([variableName isEqualToString:@"Elevation of reservoir water surface above datum, ft"]) {

        NSArray      *values = [obj valueForKey:@"values"];
        NSDictionary *value  = [values objectAtIndex:0];

        values = [value objectForKey:@"value"];
        value  = [values lastObject];

        NSLog(@"%@", [value objectForKey:@"value"]);
    }
}];

笔记

没有任何形式的验证/范围检查我会把它作为练习留给你做

于 2012-04-11T23:06:43.243 回答
0

您可能会考虑的一件事是使用工具为您生成模型类。这样你就可以使用点访问器让你的生活更轻松一些。在 Mac App Store 中,JSON Accelerator 或 Objectify 是不错的选择。然后,您将 NSDictionary 通过管道传输到这些模型类中,这很容易。

于 2012-04-17T05:44:09.047 回答