2014-05-03 95 views
0

我正在使用Mantle來解析來自Yelp的一些JSON數據。解析JSON數據並處理數組

對於每個返回的業務,我得到一個NSArray類別。這將是一個例子:

yelpCategories =  (
      (
     "Wine Bars", 
     "wine_bars" 
    ), 
      (
     "Ice Cream & Frozen Yogurt", 
     icecream 
    ) 
); 

yelpCategories是我保存的數組的名稱。後來我試圖將數組解析爲字符串:

NSMutableString *yelpCats = [[NSMutableString alloc] init]; 
    for (NSObject * obj in business.yelpCategories) 
    { 
     [yelpCats appendString:[NSString stringWithFormat:@"%@,",[obj description]]]; 
    } 

問題出在上面。我正在返回一個字符串,就像「(」所以我必須錯誤地訪問數組。我怎樣才能正確訪問每個對象,理想情況下,我會尋找結束字符串o是@「酒吧,冰淇淋&冷凍酸奶」 。

編輯

The categories array: (
     (
     Pubs, 
     pubs 
    ) 
) 

最後編輯 - 建議的解決方案

​​

回答

2

使用對象的描述給你什麼,你在調試器中,其中包括額外的回車看到

你想要做的是一樣的東西:

yelpCats = [yelpCategories componentsJoinedByString:@", "]; 
+0

我仍然獲得相同輸出「(」與上面的方法......這是因爲它是如何將數據存儲看起來像一個數組的數組? – StuartM

+0

增加了最終的編輯提出的方案哪些工作,但我想我會分享的問題,以確定是否有更好的方法比提交作爲答案,請讓我知道。謝謝 – StuartM

1

@jeffamaphone的回答不過是做事情你做什麼幾乎工作,我認爲你只是在混淆的內容的正確和最佳途徑陣列。

yelpCategories數組是一個字符串數組,因此您不需要調用stringWithFormat或調用description方法。事實上,[obj description]將返回一個字符串,所以你甚至不需要stringWithFormat在你的例子中,你會得到相同的輸出。爲了使您的原始方法的工作變化:

NSMutableString *yelpCats = [[NSMutableString alloc] init]; 
for (id obj in business.yelpCategories) 
{ 
    //obj is a string so we can just append it. 
    [yelpCats appendString:obj]]; 
} 

也注意到我改變NSObject的* OBJ只是id obj,這是慣用的方式,並宣佈在Objective-C NSObjects的速記方式。在這個例子中,我實際上會使用(NSString *category in business.yelpCategories)來代替更好的可讀性。在這種情況下,你向每個人宣告你期望數組中的每個對象都是一個字符串,然後如果你想在循環內部使用NSString方法,那麼你不必投射它。

+0

我得到一個錯誤與你的兩種建議的方法:'NSInvalidArgumentException',原因: ' - [__ NSCFArray length]:發送到實例的無法識別的選擇器' – StuartM

+0

我假定business.yelpCategories數組持有字符串,它看起來好像沒有。您能否提供試圖解析的json以及數組的內容?您可以執行NSLog(@「數組內容:%@」,業務ss.yelpCategories)查看內容。 – Brandon

+0

我原本是爲這個問題做過的,但添加了一個EDIT來清楚。該日誌是business.yelpCategories數組 – StuartM