2015-03-13 97 views
0

我正在處理JSON解析應用程序。我使用touchjson解析json的網址是 -CJSON反序列化錯誤

https://dl.dropboxusercontent.com/u/746330/facts.json

{ 
"title":"About Canada", 
"rows":[ 
    { 
    "title":"Beavers", 
    "description":"Beavers are second only to humans in their ability to manipulate and change their environment. They can measure up to 1.3 metres long. A group of beavers is called a colony", 
    "imageHref":"http://upload.wikimedia.org/wikipedia/commons/thumb/6/6b/American_Beaver.jpg/220px-American_Beaver.jpg" 
    }, 
    { 
    "title":"Flag", 
    "description":null, 
    "imageHref":"http://images.findicons.com/files/icons/662/world_flag/128/flag_of_canada.png" 
    }, 
    { 
    "title":"Transportation", 
    "description":"It is a well known fact that polar bears are the main mode of transportation in Canada. They consume far less gas and have the added benefit of being difficult to steal.", 
    "imageHref":"http://1.bp.blogspot.com/_VZVOmYVm68Q/SMkzZzkGXKI/AAAAAAAAADQ/U89miaCkcyo/s400/the_golden_compass_still.jpg" 
    }, 
    { 
    "title":"Hockey Night in Canada", 
    "description":"These Saturday night CBC broadcasts originally aired on radio in 1931. In 1952 they debuted on television and continue to unite (and divide) the nation each week.", 
    "imageHref":"http://fyimusic.ca/wp-content/uploads/2008/06/hockey-night-in-canada.thumbnail.jpg" 
    }, 
    { 
    "title":"Eh", 
    "description":"A chiefly Canadian interrogative utterance, usually expressing surprise or doubt or seeking confirmation.", 
    "imageHref":null 
    }, 
    { 
    "title":"Housing", 
    "description":"Warmer than you might think.", 
    "imageHref":"http://icons.iconarchive.com/icons/iconshock/alaska/256/Igloo-icon.png" 
    }, 
    { 
    "title":"Public Shame", 
    "description":" Sadly it's true.", 
    "imageHref":"http://static.guim.co.uk/sys-images/Music/Pix/site_furniture/2007/04/19/avril_lavigne.jpg" 
    }, 
    { 
    "title":null, 
    "description":null, 
    "imageHref":null 
    }, 
    { 
    "title":"Space Program", 
    "description":"Canada hopes to soon launch a man to the moon.", 
    "imageHref":"http://files.turbosquid.com/Preview/Content_2009_07_14__10_25_15/trebucheta.jpgdf3f3bf4-935d-40ff-84b2-6ce718a327a9Larger.jpg" 
    }, 
    { 
    "title":"Meese", 
    "description":"A moose is a common sight in Canada. Tall and majestic, they represent many of the values which Canadians imagine that they possess. They grow up to 2.7 metres long and can weigh over 700 kg. They swim at 10 km/h. Moose antlers weigh roughly 20 kg. The plural of moose is actually 'meese', despite what most dictionaries, encyclopedias, and experts will tell you.", 
    "imageHref":"http://caroldeckerwildlifeartstudio.net/wp-content/uploads/2011/04/IMG_2418%20majestic%20moose%201%20copy%20(Small)-96x96.jpg" 
    }, 
    { 
    "title":"Geography", 
    "description":"It's really big.", 
    "imageHref":null 
    }, 
    { 
    "title":"Kittens...", 
    "description":"Éare illegal. Cats are fine.", 
    "imageHref":"http://www.donegalhimalayans.com/images/That%20fish%20was%20this%20big.jpg" 
    }, 
    { 
    "title":"Mounties", 
    "description":"They are the law. They are also Canada's foreign espionage service. Subtle.", 
    "imageHref":"http://3.bp.blogspot.com/__mokxbTmuJM/RnWuJ6cE9cI/AAAAAAAAATw/6z3m3w9JDiU/s400/019843_31.jpg" 
    }, 
    { 
    "title":"Language", 
    "description":"Nous parlons tous les langues importants.", 
    "imageHref":null 
    } 
] 
} 

出於某種原因,我得到當我使用CJONDeserializer錯誤---

錯誤域= CJSONDeserializerErrorDomain代碼= -104「無法掃描字典,無法掃描值。」 UserInfo = 0x7feb38d99ed0 {NSLocalizedDescription =無法掃描字典。無法掃描的值,行= 0,字符= 0,位置= 0,片段= HERE> { 「稱號」:「關於能否}!

,如果我用NSJSONSerializer它給了我以下錯誤---

「錯誤域= NSCocoaErrorDomain代碼= 3840‘的操作無法完成。(可可錯誤3840)’(無法將數據轉換爲字符串在字符2643)的UserInfo = 0x7f8559c56700 {NSDebugDescription =無法將數據轉換爲字符2643附近的字符串}}「

對於我使用的代碼,如果我使用任何其他json url,它不會給我任何錯誤。

這裏是我使用的代碼 -

- (void)viewDidLoad { 
NSURL *url = [NSURL URLWithString:urlString]; 
    NSURLRequest *request = [NSURLRequest requestWithURL:url]; 
    NSURLConnection *connection = [NSURLConnection connectionWithRequest:request delegate:self]; 
    if (connection) { 
     self.receivedData = [[NSMutableData alloc] init]; 
    } 
} 

- (void)connectionDidFinishLoading:(NSURLConnection *)connection { 
    // The request is complete and data has been received 
    // You can parse the stuff in your instance variable now 

    NSError *error = nil; 

    NSDictionary *receivedDataDictionary = [[CJSONDeserializer deserializer] deserializeAsDictionary:self.receivedData error:&error]; 

    NSArray *arrayFromJson = [receivedDataDictionary objectForKey:@"title"]; 

    for (NSDictionary *tempDict in arrayFromJson) { 
     NSLog(@"blah %@", tempDict); 
    } 

} 

任何幫助將非常感激。提前致謝。

回答

2

JSON的第一件事:「標題」不包含數組,數組在關鍵「行」中。

第二:它看起來像問題是在你的JSON。您的JSON在第三個最後一個對象中包含「É」。 CJSONDeserializer無法解碼這種字符。使用NSJSONSerialization。嘗試下面的代碼。

NSError *error; 
NSString *string = [NSString stringWithContentsOfURL:[NSURL URLWithString: urlString] encoding:NSISOLatin1StringEncoding error:&error]; 

NSData *resData = [string dataUsingEncoding:NSUTF8StringEncoding]; 

id jsonObject = [NSJSONSerialization JSONObjectWithData:resData options:kNilOptions error:&error]; 

if (error) { 
    //Error handling 
} else { 
    //use your json object 
    NSArray *arrayFromJson = [jsonObject objectForKey:@"rows"]; 

    for (NSDictionary *tempDict in arrayFromJson) { 
     NSLog(@"blah %@", tempDict); 
    } 
}