NSJSONSerialization – 如何正确地将JSON转换为NSArray?

我遇到以下问题:我想要将我的iPhone应用程序连接到服务器上的数据库。 因此我使用一些(简单的).php文件来pipe理对数据库的访问。 插入新的数据已经工作,但我有一些麻烦转换为NSMutableArray获取的数据:

NSURL *contentURL = [NSURL URLWithString:[kHOSTURL stringByAppendingString:kGETBarsURL]]; NSLog(@"URL : %@", contentURL); NSData *contentData = [NSData dataWithContentsOfURL:contentURL]; NSLog(@"Data : %@", contentData); NSError *e = nil; NSMutableArray *jsonArray = [NSJSONSerialization JSONObjectWithData:contentData options:kNilOptions error:&e]; NSLog(@"JSON : %@", jsonArray); NSLog(@"Error : %@", e); 

输出是这样的(我'XX'和缩短'数据:'):

 2012-04-28 13:49:37.229 XX[14434:f803] URL : http://xx/getBars.php 2012-04-28 13:49:37.389 XX[14434:f803] Data : <5b7b2275 6e697175 65223a22 34222c22 4e616d65 223a2254 65737422 2c224465 7461696c 73223a22 54686973 49734154 65737422 7d2c7b22 ...> 2012-04-28 13:49:37.390 XX[14434:f803] JSON : (null) 2012-04-28 13:49:37.392 XX[14434:f803] Error : Error Domain=NSCocoaErrorDomain Code=3840 "The operation couldn't be completed. (Cocoa error 3840.)" (Garbage at end.) UserInfo=0x6daa610 {NSDebugDescription=Garbage at end.} 

如果我在浏览器中打开页面,如下所示:

 [{"unique":"4","Name":"Test","Details":"ThisIsATest"}, {"unique":"5","Name":"Test","Details":"ThisIsATest"}, {"unique":"6","Name":"Test","Details":"ThisIsATest"}, {"unique":"7","Name":"Test","Details":"ThisIsATest"}, {"unique":"8","Name":"Test","Details":"ThisIsATest"}, {"unique":"9","Name":"Test","Details":"ThisIsATest"}, {"unique":"10","Name":"Test","Details":"ThisIsATest"}] 

我也试过NSJSONSerialization中的其他选项,但没有工作:(有人可以帮我吗?

 2012-04-28 14:18:30.192 XX[14541:f803] Encoding : [{"unique":"4","Name":"Test","Details":"ThisIsATest"},{"unique":"5","Name":"Test","Details":"ThisIsATest"},{"unique":"6","Name":"Test","Details":"ThisIsATest"},{"unique":"7","Name":"Test","Details":"ThisIsATest"},{"unique":"8","Name":"Test","Details":"ThisIsATest"},{"unique":"9","Name":"Test","Details":"ThisIsATest"},{"unique":"10","Name":"Test","Details":"ThisIsATest"}] <script type="text/javascript"> var _gaq = _gaq || []; _gaq.push(['_setAccount', 'UA-16106315-6']); _gaq.push(['_setDomainName', '.xx.de']); _gaq.push(['_trackPageview']); (function() { var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); })(); </script> 

很明显,你最终确实有“垃圾”。 你有一个JavaScript块虽然在浏览器中不可见,但它仍然从你的PHP脚本返回。 删除,你应该很好去。

最近我遇到了同样的问题,经过将近一个小时,我发现这是我发送请求的URL的问题。 检查URL以查看它是否实际上响应了JSON数据。 祝你好运!;