2014-08-27 31 views
-1

林從Web服務解析JSON使用的Objective - C

data =  { 
    following = 1; 
}; 
message = "You are now following"; 
status = 1; 

得到如下一個JSON和我使用它下面的代碼(以獲得「下面的」鍵值試圖循環)

for(NSDictionary *item in datarecieved){ 
     int placeName = [item valueForKey:@"following"]; 
     NSLog(@"FOLLOWING VALUE %i", placeName); 
    } 

但我得到一個例外 -

+0

你可以顯示你的json嗎? – BHASKAR 2014-08-27 12:19:03

+1

請注意,您省略了開始和結尾的{{}}字符。這些對於理解你所擁有的至關重要,因爲它們表示字典。 (同樣,顯示JSON時,必須確保包含最外面的字符。) – 2014-08-27 12:20:18

+0

然後轉到json.org並瞭解JSON語法。學習只需要5-10分鐘,如果你瞭解它,處理更容易,而試圖「烹飪」所有內容。 – 2014-08-27 12:22:07

回答

2

試試吧

int placeName = [datarecieved[@"data"][@"following"] intValue]; 
+1

但是對於初學者來說,最好一次完成一步 - 'NSDictionary * dataDict = dataReceived [@「data」]; NSNumber * followingNum = dataDict [@「following」]; int placeName = [followingNum intValue];'然後可以檢查中間值以瞭解當它不正確時發生了什麼。 – 2014-08-27 12:25:35

-1

你無疑變得異常「型NSException的未捕獲異常」是無法識別的選擇發送到實例爲0x123 45678,因爲item不支持該選擇器。

您需要檢查item實際上是一個NSDictionary是調用valueForKey:之前(你應該使用objectForKey:反正):

for(NSDictionary *item in datarecieved){ 
    if ([item isKindOfClass:[NSDictionary class]]) { 
     int placeName = [item objectForKey:@"following"]; 
     NSLog(@"FOLLOWING VALUE %i", placeName); 
    } 
} 

(你可能想break在某些時候,一旦你找到了你」重新尋找)。

+0

謝謝,但代碼不執行「if」塊,事實證明我沒有得到「以下」值。 – Yrol 2014-08-27 12:15:17

+0

看起來你需要找到'data'字典。 @bhargavg實際上給出了一個可能對你更好的答案。 – trojanfoe 2014-08-27 12:16:27

1

一旦反序列化JSON這將是NSDictionary,所以你不需要使用循環(除非你通過所有的鍵需要循環)

在你的情況,如果你只是想爲following鍵值,你可以做以下

NSNumber *following = [datarecieved valueForKeyPath:@"data.following"]; 
NSLog(@"FOLLOWING VALUE %@", following); 
5

你要做這樣的

for(NSDictionary *item in datarecieved){ 
     if([item class] == [NSDictionary class]) 
     { 
     int placeName = [item valueForKey:@"following"]; 
     NSLog(@"FOLLOWING VALUE %i", placeName); 
     } 
    } 

因爲有響應其他兩個關鍵,他們這麼想的包含以下主要

+0

你爲什麼使用'valueForKey:'?你爲什麼要像這樣測試類,而不是使用'isKindOfClass'? – trojanfoe 2014-08-27 12:39:23

0

首先,你需要有效的JSON。看看OP評論,瞭解JSON有一個很好的地址。

然後你首先必須解析JSON數據。假設datareceived屬於NSData

NSError *error; 
NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:datareceived options:nil error:&error]; 

if(error) { 
    NSLog(@"parsing error: %@", error); 
} 
else { 
    for(NSString *key in [dict allKeys]) { 
     NSLog(@"%@ = %@", key, [dict objectForKey:key]); 
    } 
}