2014-08-27 46 views
1

我正在開發iOS應用程序。我在下面的代碼中從PHP服務器獲取JSON數據。當我在開發iOS應用程序時從服務器獲取JSON數據時,包含奇怪的字符

NSURL *requestUrl = [NSURL URLWithString:urlString]; 
NSURLRequest *request = [[NSURLRequest alloc] initWithURL:requestUrl]; 
NSHTTPURLResponse *httpResponse; 

NSData *data = [NSURLConnection sendSynchronousRequest:request 
            returningResponse:&httpResponse error:nil]; 

NSString *str= [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; 

NSError *e = nil; 
NSArray *array =[NSJSONSerialization JSONObjectWithData:[str dataUsingEncoding:NSUTF8StringEncoding] options:NSJSONReadingAllowFragments|NSJSONReadingMutableContainers|NSJSONReadingMutableLeaves error:&e]; 

NSLog(@"str=%@",str); 
NSLog(@"error=%@",e); 

的NSLog(@ 「錯誤=%@」,E)說: 「錯誤域= NSCocoaErrorDomain代碼= 3840」 的操作無法完成。 (Cocoa error 3840.)「(字符3010周圍形成不良對象)。UserInfo = 0x15ed7f40 {NSDebugDescription =字符3010周圍形成不良對象。}」。

NSLog(@「str =%@」,str)意外地包含「\ 343 \ 201」。

我認爲問題是JSON數據不正確,並且上面的「\ 343 \ 201」導致此問題。

你能告訴我如何解決這個問題嗎?

+1

你爲什麼要從數據轉換爲字符串並返回數據?這隻會耗費時間,電池壽命,內存,並且不會有任何用途。向我們展示似乎會導致問題的整個字符串。如果您收到錯誤的JSON數據,則需要在服務器上進行修復。另一方面,這可能只是通過UTF-8與非ASCII數據,並且正常。 – gnasher729 2014-08-27 15:10:39

+0

當您使用NSURLConnection檢索數據時,您忽略了錯誤 - 您是否檢查過這裏是否存在問題?你確定你從服務器獲得的數據是UTF-8嗎? – thegrinner 2014-08-27 15:11:45

+0

-1不引用整個錯誤消息。 – 2014-08-27 15:19:57

回答

0

快速搜索錯誤消息表明問題是由於格式錯誤的JSON數據造成的。 (Cocoa error 3840.)「(JSON文本沒有以數組或對象開始,選項允許片段未設置)。UserInfo = 0x984aeb0 { NSDebugDescription = JSON文本沒有以數組或對象和選項開始,以允許片段未設置。}

這意味着您應該允許片段,我可以看到它是您已經使用的選項。我建議你嘗試在瀏覽器中執行JSON查詢並驗證JSON。您可以將其複製到文本編輯器中以確保其有效。共享該字符串(如果它不是敏感信息)可以讓我們進一步隔離問題。

SO上的其他人正在報告類似的問題,例如here。我建議你採取錯誤消息文本「錯誤域= NSCocoaErrorDomain代碼= 3840」操作無法完成。 (Cocoa error 3840.)「並搜索SO以獲得更多關於導致其問題的線索的信息

您可能還想嘗試不同的方法,將選項設置爲零(用於測試目的),然後執行再次和驗證結果

UPDATE

OK,完整的錯誤消息是:

的NSLog(@ 「錯誤=%@」,E)說: 「錯誤域= NSCocoaErrorDomain代碼= 3840」 的操作(可可錯誤3840.)「(字符3010周圍形成的對象很糟糕)。UserInfo = 0x15ed7f40 {NSDebugDescription =形成的對象不完整字符3010.}「。

基於此,您的JSON中有一些錯誤的文本。輸出到文本文件並儘可能共享。使用這些關鍵詞「JSON形成周圍的人物時出現錯誤的物體」來搜索SO,揭示了這四個答案,即one。請檢查,看看這些解決您的問題。

+0

謝謝你的長時間回覆。參考你的建議,我可以解決我的問題。我的問題是,上面的str包含雙引號。這會導致不適當的JSON字符串。 – supermonkey 2014-08-27 16:38:17

0

「\ 343 \ 201」只是一個平假名字符。絕對正常,從JSON沒有問題。發佈整個您認爲會導致問題的字符串。

相關問題