2011-08-30 80 views
3

我正在導入JSON字典。我需要知道密鑰的名稱才能使用它。JSON字典中的鍵

字典加載數據確定:

- (void)connectionDidFinishLoading:(NSURLConnection *)connection { 
[connection release]; 
NSString *responseString = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding]; 
[responseData release];  
    NSDictionary *results = [responseString JSONValue]; 
    NSLog(@"tenga: %@",results); 

,但是當我試圖讓按鍵的名稱應用程序崩潰:

NSArray * keys = [results allKeys]; 
NSLog(@"keys: %@",keys); ...} 

錯誤消息:

[__NSArrayM allKeys]:無法識別的選擇器發送到實例0x5a16b30 2011-08-30 22:52:26.171 Twitter搜索[1906:207] *終止應用程序由於未捕獲的異常 'NSInvalidArgumentException',原因是: ' - [__ NSArrayM allKeys]:無法識別的選擇發送到實例0x5a16b30'

爲什麼allKeys不工作?

如何獲取我的密鑰的名稱,以便我可以開始使用這些對象?使用http://code.google.com/p/json-frameworkStig Brautaset json framework

+0

你會得到什麼樣的崩潰? –

+0

嗨Tnx,我在問題的歡呼中添加錯誤 – MaKo

+0

你還使用什麼JSON框架? –

回答

8

從獲得的JSON字符串中獲得的URL給了您一個數組,而不是對象,即它看起來像這樣:

[ { "foo1" : "bar1" }, { "foo2" : "bar2" },... ] 

請注意括號[ ]。在這種情況下,您的JSON解析器爲您提供NSArray作爲頂級(Objective-C)對象。你需要一些邏輯,如:

id results = [responseString JSONValue]; 
if ([results isKindOfClass: [NSArray class]]) 
{ 
    // probably iterate through whtever is in it 
} 
else if ([results isKindOfClass: [NSDictionary class]]) 
{ 
    // dictionary at the top level. Hooray! 
} 
else 
{ 
    // something went horribly wrong, deal with it. 
} 
0

發佈日誌

編輯

林說,這個調用[responseString JSONValue]返回NSArray

2

你在這裏得到的結果不是NSDictionary而是NSArray。 NSArray沒有allKeys選擇器導致崩潰。如果您在您使用的JSON框架上發佈更多信息,我們可以幫助更好地解決問題