2013-04-16 128 views
5
{"User":{"id":"42","name":"martin"}} 

我的NSData轉換爲NSString的返回該JSON這似乎是完全有效的,但是方法:NSJSONSerialization返回nil

[NSJSONSerialization isValidJSONObject:data] 

是說這不是一個有效的JSON對象。

任何人都可以指出我所犯的一個錯誤,或者想到這種情況發生的原因嗎?

回答

9

我打賭你的字符串中有一個不可打印的字符,例如使數據無效。

聲明那麼NSError* error變量調用[NSJSONSerialization JSONObjectWithData:data options:0 error:&error]方法來嘗試將JSON轉換:很明顯,如果你的數據將被視爲無效,它將返回nil,但至少你將有什麼錯在之後的NSError* error變量的說明。

NSData* data = ... // your data 
NSError* error = nil; // Declare a variable to hold the error upon return 
id obj = [NSJSONSerialization JSONObjectWithData:data options:0 error:&error]; // Try to convert your data 
NSLog(@"obj: %@ ; error: %@", error); // Log the decoded object, and the error if any 
+0

我把錯誤,它說空,不知何故它突然工作......怪異......無論如何它現在的作品! – Alex

+0

我有同樣的問題,我得到:'(字符43579周圍的未轉義的控制字符)。UserInfo = 0x9b78e30 {NSDebugDescription =字符43579周圍的未轉義的控制字符。我如何解決它? – marciokoko

+0

修復您的JSON原始數據。我敢打賭,你試圖解碼的JSON在開始時並不是有效的JSON數據,並且在錯誤43579處有一個無效字符,正如錯誤解釋。將你的JSON粘貼到http://jsonlint.org/中,檢查它是無效的還是格式不正確的JSON。如果它不是有效的JSON,你顯然需要修復它的源代碼_(如果你正在從這樣的文件中讀取'NSData',修正'file.json'的內容,或者修復由WebServer生成的字符串一個Web服務,將這個JSON返回到你的應用程序到這個'NSData'等等......)_ – AliSoftware