NSURLRequest *request = [[NSURLRequest alloc] initWithURL:[NSURL URLWithString:@"http://www.hrjournalmyanmar.com/test.cfm"]];
__block NSDictionary *json;
[NSURLConnection sendAsynchronousRequest:request
queue:[NSOperationQueue mainQueue]
completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
json = [NSJSONSerialization JSONObjectWithData:data
options:0
error:nil];
NSLog(@"Async JSON: %@", json);
我无法说服为什么我从上面得到(null)返回消息甚至json格式并且编码是正确的。当json数据(字段长度)很小但字段长度很长且发生(空)错误时,上面的编码是正确的。
答案 0 :(得分:2)
您的JSON无效。请在JSONLint或JSON Editor
中查看问题是使用thumb
密钥,该密钥缺少开头"
。
在你的JSON中它就像:
thumb":"http: //mmjobs.mmdroid.biz/articles/articles234."
应该是这样的:
"thumb":"http: //mmjobs.mmdroid.biz/articles/articles234."
修改强>
根据您的评论。
仍然你的JSON无效它包含很多新的行字符并且它使它无效。我使用以下方法解决了您的问题。
NSURLRequest *request = [[NSURLRequest alloc] initWithURL:[NSURL URLWithString:@"http://www.hrjournalmyanmar.com/test.cfm"]];
__block NSDictionary *json;
[NSURLConnection sendAsynchronousRequest:request
queue:[NSOperationQueue mainQueue]
completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError)
{
NSError *error = nil;
NSString *jsonString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
jsonString = [jsonString stringByReplacingOccurrencesOfString:@"\r\n" withString:@""];
jsonString = [jsonString stringByReplacingOccurrencesOfString:@"\n" withString:@""];
jsonString = [jsonString stringByReplacingOccurrencesOfString:@"\r" withString:@""];
json = [NSJSONSerialization JSONObjectWithData:[jsonString dataUsingEncoding:NSUTF8StringEncoding] options:NSJSONReadingAllowFragments error:&error];
if (!error)
{
NSLog(@"Async JSON: %@", json);
}
else
{
NSLog(@"Error: %@", error);
}
}];
注意:强>
我不推荐这种方法,最好在服务器端更改JSON本身。使用error参数,而不是将nil传递给它。错误对象将为您提供确切的错误消息。
答案 1 :(得分:0)
问题是您没有在后端创建有效的JSON格式。如果您尝试我的代码片段,效果很好,但不是在JSON中创建我的数据就是NSString。
NSURLRequest *request = [[NSURLRequest alloc] initWithURL:[NSURL URLWithString:@"http://www.hrjournalmyanmar.com/test.cfm"]];
[NSURLConnection sendAsynchronousRequest:request
queue:[NSOperationQueue mainQueue]
completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
NSString* dataReceived = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
NSLog(@"Async JSON: %@", dataReceived);
}];