0

JSONデータをダウンロードしましたが、特定のオブジェクトにアクセスできません。私のJSONデータから、最新のものを取得しようとしていvalueますvariableName = "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で同じことをするworkingforステートメントを書くことができないようです:

 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

検討できることの1つは、ツールを使用してモデルクラスを生成することです。そうすれば、ドットアクセサーを使用して、生活を少し楽にすることができます。Mac App Storeでは、JSONアクセラレータまたはObjectifyが非常に優れたオプションです。次に、NSDictionaryをこれらのモデルクラスにパイプ処理すると、非常に簡単になります。

于 2012-04-17T05:44:09.047 に答える