2015-05-02 77 views
-1

我很努力想知道爲什麼這段代碼不工作。我有許多其他視圖使用不同的JSON服務。所有工作正常。但是,這根本不是。我試圖從服務中取回值,但是當我試圖循環它時(參見下面的代碼),數組是無的。顯然我錯過了一些簡單的東西,但我一直在探討這個問題。解析JSON對象 - 目標C

JSON服務的抽象視圖;

{ 
    "0": { 
     "altitude": "14500", 
     "latitude": "41.41555", 
     "longitude": "-73.09605", 
     "realname": "David KGNV" 
    }, 
    "1": { 
     "altitude": "61", 
     "latitude": "33.67506", 
     "longitude": "-117.86739", 
     "realname": "Mark CT" 
    }, 
    "10": { 
     "altitude": "38161", 
     "latitude": "40.51570", 
     "longitude": "-93.25554", 
     "realname": "Bob CYYZ" 
    }, 
    "100": { 
     "altitude": "33953", 
     "latitude": "52.35600", 
     "longitude": "5.30384", 
     "realname": "Jim LIRQ" 
    } 
} 

JSON調用的摘要視圖;

*注意NSArray * currentMapArray valueKeyPath設置爲「」,因爲我需要JSON結果中的所有元素。

NSError *_errorJson = nil; 
     jsonArray = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil]; 

     if (_errorJson != nil) { 
      NSLog(@"Error %@", [_errorJson localizedDescription]); 
     } else { 
      //Do something with returned array 
      dispatch_async(dispatch_get_main_queue(), ^{ 
       NSDictionary *mapJson = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil]; 

       //Loop through the JSON array 
       NSArray *currentMapArray = [mapJson valueForKeyPath:@""]; 

       //set up array and json call 
       mapArray = [[NSMutableArray alloc]init]; 


       for (int i = 0; i< currentMapArray.count; i++) 
       { 
        //create our object 
        NSString *nAltitude = [[currentMapArray objectAtIndex:i] objectForKey:@"altitude"]; 
        NSString *nRealname = [[currentMapArray objectAtIndex:i] objectForKey:@"realname"]; 
        NSString *nLatitude = [[currentMapArray objectAtIndex:i] objectForKey:@"latitude"]; 
        NSString *nLongitude = [[currentMapArray objectAtIndex:i] objectForKey:@"longitude"]; 

        [mapArray addObject:[[LiveVatsimMap alloc]initWithaltitude:nAltitude andrealname:nRealname andlatitude:nLatitude andlongitude:nLongitude]]; 
       } 

currentMapArray的結果爲NIL,導致NSString未被正確填充。

for (int i = 0; i< currentMapArray.count; i++) 

當然,當我硬代碼JSON節點即10到ValueKeyPath值然後將其提供正確的數據結果和相應地填充。

任何想法?很好,我只是在這個目標的C東西新。

+1

這是你的第一個問題重複零]' –

+0

而YOY你派遣一個異步任務解析JSON? –

+0

你認爲這是做什麼:'NSArray * currentMapArray = [mapJson valueForKeyPath:@「」];'? –

回答

1

您的JSON沒有數組 - 它是一個字典詞典。 `錯誤:

您可以通過它使用

NSArray *keys=[jsonArray allKeys]; 
for (NSString *key in keys) { 
    NSDictionary *elementDictionary=jsonArray[key]; 
    NSString *nAltitude = elementDictionary[@"altitude"]; 
    NSString *nRealname = elementDictionary[@"realname"]; 
    NSString *nLatitude = elementDictionary[@"latitude"]; 
    NSString *nLongitude = elementDictionary[@"longitude"]; 

    [mapArray addObject:[[LiveVatsimMap alloc]initWithaltitude:nAltitude andrealname:nRealname andlatitude:nLatitude andlongitude:nLongitude]]; 
} 
+0

謝謝你。忘了提及它作爲一個NSMutableArray施放。不知道這是否會改變它。我明白你的意思,但你在循環鍵。仍然不能完全工作,但我認爲這可能還沒有確定。 – Jeremy

+0

好吧,我明白了。謝謝你的幫助。我結束了以下代碼似乎工作。我只是將jsonArray更改爲直接來自NSDictionary..duh的mapJson!再次感謝! – Jeremy

+0

NSArray * keys = [mapJson allKeys]; for(NSString * key in keys){ NSDictionary * elementDictionary = mapJson [key]; NSString * nAltitude = elementDictionary [@「altitude」]; NSString * nRealname = elementDictionary [@「realname」]; NSString * nLatitude = elementDictionary [@「latitude」]; NSString * nLongitude = elementDictionary [@「longitude」]; } – Jeremy