0

我解析和NSString值,但得到null在控制檯。請幫我解決這個問題。解析NSString數據獲取空值

NSString *responseData = [[NSString alloc] initWithData:_responseData encoding:NSASCIIStringEncoding]; 
NSLog(@"Data: %@", responseData); 
NSData *data = [responseData dataUsingEncoding:NSUTF8StringEncoding]; 

id json = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil]; 
NSDictionary *res = [json objectForKey:@"demo"]; 
NSLog(@"res is %@",res); 
+0

你可以顯示日誌嗎?編碼是否正確? – Larme

+0

你在哪裏發生這個問題?將_responseData'轉換爲字符串或將數據反序列化爲JSON對象? – liamnichols

+0

這是你的問題:'error:nil'。如果你忽略錯誤,你如何期望調試任何東西? –

回答

1

我在其中一個項目中遇到類似問題。我試圖從NSData創建NSString(來自webservice的響應),我得到了一個零。我發現在創建String時使用NSASCIIStringEncoding解決了我的問題。事實證明,即使UTF8具有所有ASCII字符,char *也可能無法正確排列某些字符,並且默認情況下,init方法會執行nonlossy編碼,這意味着在遇到意外字符時返回nil。 對於你的情況,這可能是你的代碼。

NSString *responseData = [[NSString alloc] initWithData:_responseData encoding:NSASCIIStringEncoding]; 
NSLog(@"Data: %@", responseData); 
NSData *data = [responseData dataUsingEncoding:NSASCIIStringEncoding]; 
id json = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil]; 
NSDictionary *res = [json objectForKey:@"demo"]; 
NSLog(@"res is %@",res); 

注:我不知道你爲什麼要做所有的_responseData->數據轉換。如果你只是將_responseData反序列化爲json對象,那麼可以直接在NSJSONSerialization中使用它。如下。

id json = [NSJSONSerialization JSONObjectWithData:_responseData options:0 error:nil]; 

欲瞭解更多信息,請查看此link

+0

不工作的傢伙,感謝您的努力,我認爲後端存在問題。 –

+0

-1使用'error:nil'。 –

0

可能會出現錯誤,因爲您使用不同的編碼?嘗試在NSString和NSData中使用NSUTF8StringEncoding。

+0

null仍然:( –

0

從NSString的class reference

-initWithData:encoding:

Return Value
An NSString object initialized by converting the bytes in data into Unicode characters using encoding. The returned object may be different from the original receiver. Returns nil if the initialization fails for some reason (for example if data does not represent valid data for encoding).

你從哪兒得到_responseData?這絕對是一個NSData對象嗎? 你確定你使用正確的編碼嗎?

你能打印出_responseData並更新你的問題,所以我們可以看看?

+0

正在獲取_responseData中 - (無效)connectionDidFinishLoading:(NSURLConnection *)連接。 –

+0

和正在使用正確的編碼。請幫助。 –

+0

你是不是很清楚你的問題是。你是否正確附加數據,因爲它來自連接:didReceiveData:'? – liamnichols