2012-09-14 54 views
1

我正在写一个应用程序,应该从远程Web服务读取JSON数据。该URL格式为“something.action”。NSJSONSerialization返回null

我使用dataWithContentsofURL从服务中下载JSOn数据,我发现这个函数确实返回了一些数据。

使用这个数据我调用函数NSJSONSeraiization,但是它的响应是null。

基本上,我使用http://www.raywenderlich.com/5492/working-with-json-in-ios-5上提供的代码。唯一的区别是我从远程服务器获取数据,而我的URL的格式为“something.action”。

我无法弄清楚这里出了什么问题。

+1

什么是您返回的数据是什么样子?如果你将它解释为一个字符串(使用'[[[[NSString alloc] initWithData:yourData encoding:NSUTF8StringEncoding] autorelease]'),它看起来像JSON吗? – AliSoftware

+0

使用dataWithContentsofURL创建的变量数据确实会返回一些十六进制值,但是当我使用上面评论中给出的命令时,它将返回Null。任何线索在这里出了什么问题? – user1534235

+0

使用的编码完全错误。您收到的数据可能不是UTF8编码,正如我所假设的那样,但是使用其他编码方式(您必须与Web服务或服务文档的开发人员了解它使用的编码) – AliSoftware

回答

1

检查类似http://jsonviewer.stack.hu/的JSON查看器以确认返回的JSON是否正确。

对从您收到的NSData获取的字符串进行NSLog处理,并将其与查看器一起使用。如果有任何问题,你知道为什么该对象没有序列化。

+0

我得到的数据不在正确的格式,它是像6d70616e的随机字符串。 1.数据是我通过使用函数dataWithContentsOfURL从NSDATA获得的。此函数的类显示为NSConcreteData 2.通过使用NSJSONSerialization的数据类将出现null :( – user1534235

+0

您可以将NSData转换为字符串并检查响应是什么? – lostInTransit

0

检查你得到的回应是正确格式的JSON文件,如果是检查其类:

NSError *jsonError = nil; 
NSJSONSerialization *myJSONObject = [NSJSONSerialization JSONObjectWithData:theNSDataObained options:NSJSONReadingMutableContainers error:&jsonError]; 

if(jsonError != nil){ 
    NSLog(@"JSON Error: %@", jsonError); 
    return; 
} 

//An NSJSONSerialization object will either be an NSDictionary or 
//an NSArray, figure out what it is: 

NSLog(@"JSON class is: %@", [myJSONObject class]); 

//if it's a NSDictionary: 
if([myJSONObject isKindOfClass:[NSDictionary class]]){ 
    NSDictionary *myJSONDictionary = (NSDictionary *) myJSONObject; 
    for(id key in myJSONDictionary){ 
     id value = [myJSONDictionary valueForKey:key]; 
     [value doStuff]; 
    } 
} 
else //if it's a NSArray.... 
+0

'theNSDataObtained '显示为NSConcreteData和myJSONObject的显示为空 还有一件事(如果有要求)...当我尝试使用互联网链接下载并显示数据时,它会正常显示。但就我而言,数据在内部企业服务器上可用。 – user1534235