2012-04-28 65 views
1

我遇到了以下問題: 我想要將我的iPhone應用程序連接到服務器上的數據庫。因此我使用一些(簡單).php文件來管理對數據庫的訪問。插入新的數據已經工作,但我有一些麻煩,提取的數據轉換成的NSMutableArray:NSJSONSerialization - 如何正確地將JSON轉換爲NSArray?

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> 
+1

錯誤說最後有垃圾數據。你檢查過了嗎? – 2012-04-28 12:06:33

+0

我該如何檢查? :)正如我所提到的,我打開了一個網頁,上面顯示的內容,但似乎好吧不是嗎? – pasql 2012-04-28 12:13:09

+1

嘗試將您的數據轉換爲NSString,打印並查看它是否爲有效的JSON。 'NSLog(@「%@」,[[NSString alloc] initWithData:contentData encoding:NSUTF8StringEncoding]);' – 2012-04-28 12:15:06

回答

2

很明顯,你確實在最後有'垃圾'。你有一個JavaScript塊,雖然在瀏覽器中不可見,但它仍然從你的php腳本返回。刪除,你應該很好去。

+0

非常感謝:)現在工作! – pasql 2012-04-28 18:05:48

0

我最近遇到了同樣的問題,經過將近一個小時後,我發現這是我發送請求的URL的問題。檢查URL以查看它是否實際上響應了JSON數據。祝你好運!;