2014-05-02 55 views
7

你好,錯誤JSON:「在結束NSDebugDescription垃圾」(IOS)

即使我做的研究,我發現沒有什麼誰可以幫助我在我的處境。

因此,我嘗試解析由xcode上的php腳本創建的Json,但是我有一個阻止該過程的錯誤。

我新,所以我triedto做最好的我的問題的佈局......

我的錯誤:

[376:70b] Error Domain=NSCocoaErrorDomain Code=3840 "The operation couldn’t be completed. (Cocoa error 3840.)" (Garbage at end.) UserInfo=0x8bc0f70 {NSDebugDescription=Garbage at end. 

我的代碼:

NSData *jsonSource = [NSData dataWithContentsOfURL: 
          [NSURL URLWithString:@"http://codlobbyz.com/app/service.php"]]; 
    NSError *err; 
    id jsonObjects = [NSJSONSerialization JSONObjectWithData: 
         jsonSource options:NSJSONReadingMutableContainers error:&err]; 
    NSLog(@"%@", err); 

我的JSON:

[{"nom":"Call of duty ghost","date":"22 novembre","image":"appicon.png"},{"nom":"Fifa 14","date":"22 novembre","image":"appicon.png"}] 

我希望你能幫助我,謝謝你的答案。

+1

如果您繼續瀏覽http://jsonlint.com並嘗試使用您的URL http://codlobbyz.com/app/service.php,並嘗試使用您的網址,則表示您的JSON不符合規定。似乎你的WS正在發送其他數據(即垃圾)。 – Larme

+0

hm,所以當我訪問這個URL並粘貼例子中的json時,驗證器顯示「VALID JSON」... – thorb65

+0

@thorb,將問題中的JSON與來自http://codlobbyz.com/app/的響應數據進行比較service.php – Wain

回答

12

的PHP腳本返回JSON,而且它後面HTML的一個片段:

curl http://codlobbyz.com/app/service.php 

或者通過:

[{"nom":"Call of duty ghost","date":"22 novembre","image":"appicon.png"},{"nom":"Fifa 14","date":"22 novembre","image":"appicon.png"}] 
<!-- Hosting24 Analytics Code --> 
<script type="text/javascript" src="http://stats.hosting24.com/count.php"></script> 
<!-- End Of Analytics Code --> 

您可以通過使用curl命令行看到這將其加載到瀏覽器中並查看源代碼。

如果您可以控制PHP腳本,請刪除分析代碼。否則,在分析它之前,你可以使用正則表達式去除響應中的非JSON部分。

編輯:遠程非JSON用正則表達式,像這樣的工作:

NSString *json = @"[{\"nom\":\"Call of duty ghost\",\"date\":\"22 novembre\",\"image\":\"appicon.png\"},{\"nom\":\"Fifa 14\",\"date\":\"22 novembre\",\"image\":\"appicon.png\"}]\n<!-- Hosting24 Analytics Code -->\n<script type=\"text/javascript\" src=\"http://stats.hosting24.com/count.php\"></script>\n<!-- End Of Analytics Code -->"; 
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"\\s+<!--.*$" 
                     options:NSRegularExpressionDotMatchesLineSeparators 
                     error:nil]; 
NSTextCheckingResult *result = [regex firstMatchInString:json 
               options:0 
                range:NSMakeRange(0, json.length)]; 
if(result) { 
    NSRange range = [result rangeAtIndex:0]; 
    json = [json stringByReplacingCharactersInRange:range withString:@""]; 
    NSLog(@"json: %@", json); 
} 
+0

感謝它的工作!謝謝大家! – Jopolaz

+0

在8小時內我會發布最終的代碼! (我現在不能,因爲我是新用戶:)) – Jopolaz

0

如果你看看原始數據,你會發現「0」內將其刪除我用下面的for循環

NSData *objectData = [jsonStr dataUsingEncoding:NSUTF8StringEncoding]; 
      NSError *error; 
      id json = [NSJSONSerialization JSONObjectWithData:objectData options:NSJSONReadingMutableContainers error:&error]; 
      if (json == nil) { 
       int index = 0; 
       const char *bytes = [data bytes]; 
       for (int i = (int)data.length-1; i > 0; i--) { 
        unsigned char ch = (unsigned char)bytes[i]; 
        NSLog(@"%02hhx", ch); 
        if (ch != 0) { 
         index = i+1; 
         break; 
        } 
       } 

       NSRange dataRange = NSMakeRange(0, index); 
       json = [NSJSONSerialization JSONObjectWithData:[objectData subdataWithRange:dataRange] options:NSJSONReadingMutableContainers error:&error]; 
      } 

這將從您的數據結尾中截斷所有「00」個字節。