2015-03-13 163 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); 
    } 
}