2011-08-22 41 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