2013-08-27 80 views
0

我從一個Web服務這樣JSON:廣東話訪問序列化JSON數據(NSJSONSerialization)

{ 
    "Respons": [{ 
     "status": "101", 
     "uid": "0" 
    }] 
} 

我曾嘗試用下面的訪問數據:

NSError* error; 

//Response is a NSArray declared in header file. 
self.response = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error]; 

NSString *test = [[self.response objectAtIndex:0] objectForKey:@"status"]; //[__NSCFDictionary objectAtIndex:]: unrecognized selector sent to instance 
NSString *test = [[self.response objectForKey:@"status"] objectAtIndex:0]; //(null) 

但他們沒有工作,如果我NSLog的NSArray舉行串行化數據,這我我得到:

{ 
Respons = (
    { 
     status = 105; 
     uid = 0; 
    } 
); 
} 

我如何訪問數據?

+2

閱讀錯誤。 JOSN是一本字典,而不是一個數組。 – rmaddy

+0

self.response應該是NSDictionary – random

+0

請參閱json.org。學習如何閱讀JSON(學習大約需要10分鐘)。然後瞭解解碼JSON如何使用NSLog轉儲(幾乎和原始JSON一樣,只使用'()'而不是'[]'而不是所有數據都被引用)。 –

回答

3

您的JSON代表一個字典,對應於該字符串的值爲Respons鍵是一個數組。那個數組有一個單獨的對象,它本身就是一個字典。該字典有兩個密鑰,statusuid

因此,舉例來說,如果你想提取的狀態,我相信你需要:

NSArray *array = [self.response objectForKey:@"Respons"]; 
NSDictionary *dictionary = [array objectAtIndex:0]; 
NSString *status = [dictionary objectForKey:@"status"]; 

或者,在編譯器的最新版本:

NSArray *array = self.response[@"Respons"]; 
NSDictionary *dictionary = array[0]; 
NSString *status = dictionary[@"status"]; 

或者,更簡潔:

NSString *status = self.response[@"Respons"][0][@"status"]; 
+0

感謝您的偉大答案,當我嘗試比較'狀態'與字符串我得到以下警告:比較不同的指針類型'NSString *''char *' 代碼:NSDictionary * test = [NSJSONSerialization JSONObjectWithData:data選項:kNilOptions錯誤:&錯誤]; NSArray * array = test [@「Respons」]; NSDictionary * dictionary = array [0]; NSString * status = dictionary [@「status」]; NSLog(@「%@」,status); 如果(狀態== 「100」){// } 其他{// } @ – user1359448

+0

兩個user1359448問題:1。你不''==操作符比較字符串;你使用'isEqualToString'。 2.你忘了'@「100」'中的'@'。因此,它應該是'if([status isEqualToString:@「100」])...'。不管是那個還是'​​if([status integerValue] == 100)...',它都會將字符串轉換爲數字(如果在那裏有空間或者其他奇怪的東西,就避免麻煩)。 – Rob

1

您的頂級對象不是數組,它是一個字典。您可以輕鬆繞過此操作並將該密鑰的內容添加到您的陣列中。

self.response = [[NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error] objectForKey:@"Respons"];