[英]How to successfully convert JSON data to Objective-C objects?
所以我正在做的事情很簡單,從JSON格式的服務器獲取一些數據。 我正在使用Objective-C中的默認類(特別是NSJSONSerialization)將responseData getten轉換為JSON格式。
所以基本上 -
NSString* testURL=@"http://ws.audioscrobbler.com/2.0/?method=track.getsimilar&artist=Kendrick+Lamar&track=A.D.H.D&api_key=e3f53f2f2896b44ff158a586b8ee15c7&format=json";
NSData* data = [NSData dataWithContentsOfURL:[NSURL URLWithString:testURL]];
NSDictionary* json = [NSJSONSerialization
JSONObjectWithData:responseData //1
options:kNilOptions
error:&error];
NSArray* songList = [json objectForKey:@"similartracks"];
問題是,稍后當我嘗試訪問JSOn數據數組中的一個單獨對象時,就像這樣,
NSDictionary* song1 = [songList objectAtIndex:0];
它給了我這個錯誤,
*由於未捕獲的異常'NSInvalidArgumentException'終止應用程序,原因:' - [__ NSCFDictionary objectAtIndex:]:無法識別的選擇器發送到實例0x96e2b60'
關於為什么會發生這種情況的任何想法?
我很感激幫助,coffeejay
似乎[json objectForKey:@"similartracks"]
返回一個NSDictionary,嘗試這樣的事情:
NSArray* songList = [[json objectForKey:@"similartracks"] objectForKey:@"track"]
在處理這些事情時,你應該總是在嘗試使用它之前驗證你的響應,你永遠不應該相信任何輸入。 在您的情況下,您嘗試將objectAtIndex:
消息發送到NSDictionary
實例,這會引發無法識別的選擇器異常。
避免此類崩潰的一種簡單方法是檢查返回對象的類,例如:
id song1 = json[@"similartracks"]
if([song1 isKindOfClass:[NSArray class]])
{
//Now we're sure it's an array
}
您聲明返回的數據是data
,但是您正在向NSJSONSerialization
方法傳遞一個名為responseData
的變量。
你的json可能不會在yhat點返回一個數組,而是一個字典。 顯示json內容,以便我們進一步提供幫助。
(NsJSonSerialization返回id,可以是數組或字典。內容也將是數組或字典)
您的錯誤消息表明songList是字典而不是數組。 檢查數據結構。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.