2011-08-22 71 views
3

我將JSON值分配給NSDictionary並嘗試從字典中檢索Key's。它用括號返回值!帶括號的NSDictionary返回值

這是它返回 (),價值( 「HST 299」 )

這裏是JSON

[{"_id":873,"_code":"HST 299"}] 

這裏是我的代碼:

NSDictionary *courseDetail = [responseString JSONValue]; 
NSLog(@"%@ , %@", [courseDetail valueForKey:@"_id"], [courseDetail valueForKey:@"_code"]); 
+1

你可以發佈JSON嗎? – Dani

+0

我添加JSON代碼 – HardCode

回答

8

因爲你的JSON是一個數組([]表示數組)。 在數組中有兩個鍵值的字典。

所以,如果你改變你的代碼

NSDictionary *courseDetail = [[responseString JSONValue] objectAtIndex:0]; 

它會爲您提供了正確的結果。

+0

謝謝你的工作!還有一個問題:我分配給標籤時應用程序崩潰。例如courseId.text = [courseDetail valueForKey:@「_ id」];我是否需要轉換整數? – HardCode

+0

它看起來像_id是一個NSNumber但不是NSString。所以你必須把它轉換成NSString。 :) – xuzhe

+0

另外,通過使用這樣的代碼,你總是可以檢查什麼樣的類是你的對象:'if([[dict objectForKey:@「key」] isKindOfClass:[NSString class]])''。如果它是NSString,可以直接將它設置爲label.text,否則你必須自己將它轉換爲NSString。 – xuzhe

7

括號是NSArrays如何描述自己。你的值顯然是數組,每個數組都包含一個字符串,而不是裸露的字符串。

+1

所以,你的意思是我應該使用NSArray而不是NSDictionary? – HardCode

+3

@Mr。 D:你可以做'[courseDetail valueForKey:@「_ id」] objectAtIndex:0]',它會工作。 – Dani

+0

@xuzhe:不,我說得對。數組上的'valueForKey:'返回一個數組,其中包含對象對'valueForKey:'的響應,所以他的值確實是包含單個對象的數組。他當時沒有發佈他的JSON,所以我不知道這是因爲他有一個陣列開始,但我的答案仍然是正確的。 – Chuck