2010-08-02 84 views
1

我使用的觸摸JSON對我來說工作得很好。我能夠獲得一個數組,把它放在一個字典中,通過touchJSON序列化並通過http發送出去。如何從nsdictionary對象中獲取名稱和url的值?

現在在返回的一端,我收到了數據,並將其放入字典中(我使用twitter中的trends.json作爲示例JSON)。

如果我試圖讓從字典對象趨勢值,我得到這個:

2010-08-02 00:23:31.069 rateMyTaxi[30610:207] ANSWER: (
    { 
    name = "Fried Chicken Flu"; 
    url = "http://search.twitter.com/search?q=Fried+Chicken+Flu"; 
    }, 
    { 
    name = "Lisa Simpson"; 
    url = "http://search.twitter.com/search?q=Lisa+Simpson"; 
    }, 
    { 
    name = "#breakuplines"; 
    url = "http://search.twitter.com/search?q=%23breakuplines"; 
    }, 
    { 
    name = "#thingsuglypeopledo"; 
    url = "http://search.twitter.com/search?q=%23thingsuglypeopledo"; 
    }, 
    { 
    name = "Inception"; 
    url = "http://search.twitter.com/search?q=Inception"; 
    }, 
    { 
    name = "#sharkweek"; 
    url = "http://search.twitter.com/search?q=%23sharkweek"; 
    }, 
    { 
    name = "JailbreakMe"; 
    url = "http://search.twitter.com/search?q=JailbreakMe"; 
    }, 
    { 
    name = "Kourtney"; 
    url = "http://search.twitter.com/search?q=Kourtney"; 
    }, 
    { 
    name = "Shark"; 
    url = "http://search.twitter.com/search?q=Shark"; 
    }, 
    { 
    name = "Boondocks"; 
    url = "http://search.twitter.com/search?q=Boondocks"; 
    } 
) 

如果我試圖讓該值的名稱或網址,我什麼也得不到這是令人沮喪的。這是我需要的數據。你可以告訴它是字典格式,因爲它的格式是正確的,它正在閱讀適當的趨勢。我很確定我錯過了一些東西,所以請讓我知道要遵循的方向。

下面是代碼:

// this is all touch JSON magic. responseString has the full contents of trends.json 

NSString *response = [request responseString]; 
NSLog(@"response value is:%@",response); 

NSString *jsonString = response; 
NSData *jsonData = [jsonString dataUsingEncoding:NSUTF32BigEndianStringEncoding]; 
NSError *error = nil; 
NSDictionary *dictionary = [[CJSONDeserializer deserializer] deserializeAsDictionary:jsonData error:&error]; 
//end of touchJSON. It is in a dictionary now. 

NSLog(@"dictionary:%@, error %@", dictionary, error); //http://cl.ly/adb6c6a974c3e70fb51c 

NSString *twitterTrends = (NSString *) [dictionary objectForKey:@"trends"]; 
NSLog(@"ANSWER:%@",twitterTrends); //http://cl.ly/fe270fe7f05a0ea8d478 

回答

0

當您使用打印使用formatString的%@你的對象將事實上得到描述消息發送給對象的輸出。對於NSDictionary,這個輸出看起來非常類似於未分析的JSON,但它不是一個字符串,它是NSDictionaries,NSArrays,NSStrings,NSNumbers和NSDates的對象圖。

所以你想在twitter中發佈一個NSArray的NSDictionaries。獲取部件只需枚舉Array。

for (NSDictionary* trend in twitterTrends) { 
    NSString* url = [trend objectForKey:@"url"]; 
    NSString* name = [trend objectForKey:@"name"]; 
} 

或者你可以訪問它的指數趨勢:

[[twitterTrends objectAtIndex:5] objectForKey:@"url"]; 
+0

謝謝,這是我正在尋找。我拿了一個級別,並提取該代碼中的趨勢詞典。這裏是最後的代碼 for(NSDictionary * item in [dictionary objectForKey:@「trends」]){NEXT string * name = [item objectForKey:@「name」]; NSString * url = [item objectForKey:@「url」]; – 2010-08-02 14:15:52

0

你只有儘可能提取字典的數組。 (響應在字典內的數組中有字典。)

您需要從數組中提取每個字典,然後查找該字典中的名稱和url條目。

像這樣的東西應該打印的第一個條目:(!代碼尚未經過測試,因此可能無法編譯直客)

NSArray *twitterTrends = [dictionary objectForKey:@"trends"]; 
NSDictionary *entry1 = [twitterTrends objectAtIndex:0]; 
NSLog(@"entry1: %@, %@", [entry1 objectForKey:@"name"], [entry1 objectForKey:@"url"]); 

+0

感謝這有助於。 – 2010-08-02 14:16:34

相關問題