2013-07-03 27 views
-1

我有例如JSON響應:的iOS:JSON編碼的問題

[ 
    [], 
     { 
     "\u0000Data\u0000NewData": { 
     "id": "40", 
     "moreInfo": { 
     "Info1": "sth1", 
     "Info2": "sth2" 
     } 
    } 
    } 
    ] 

我想打印鍵名:

NSString *text = [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding];       
    NSData *jsonData = [text dataUsingEncoding:NSUTF8StringEncoding]; 
    NSError *e; 
    NSArray *dict = [NSJSONSerialization JSONObjectWithData:jsonData options: 0 error:&e]; 
    NSDictionary *temp = [dict objectAtIndex: 1]; 

    for(id key in temp) 
     NSLog(@" %@ --" , key); // Should print "DataNewData --" 

的問題是,只能在關鍵的模樣 「DataNewData」(沒有\ u0000),否則它打印一個空白行(即使沒有「 - 」結尾)

+0

爲什麼你會有一個開始(甚至有)空字符的鍵,我不知道obj-​​c,但在C字符串中是空終止的。 – Musa

+0

我不負責創建回覆:) – user2262230

+0

\ u0000是空字符。您引用的服務器響應可能在技術上無效的JSON。至少,這很奇怪,我實際上會期望它被錯誤地解析。根據數據的性質,您可以在將其解析爲字典之前,從響應字符串中刪除此子字符串的實例。 – Macondo2Seattle

回答

0

你能檢查解碼在你的web服務中完成的這個JSON響應。它可能沒有正確的解碼,或者有時它會使用另一種解碼格式或默認解碼格式。我認爲一些特殊字符或空字符出現在JSON數據中,同時對您的服務輸出進行編碼。類似於您的Web服務中使用的解碼編碼,您必須在您的JSON字符串編碼中使用此處。

即,如果您在JSON解析中使用UTF-8編碼,則必須確認在您的服務響應的JSON代中使用了相同的編碼/解碼。

我前一天有類似的問題,但通過在解析...之前用空字符串輕鬆地替換JSON字符串中的特殊字符來解決... :-D但這不是一個正確的方法,糾正編碼和解碼是我認爲這個無效的utf-8 JSON字符串的正確方法。

可能是一些這將幫助你..謝謝

「我認爲,上面提到的JSON可能甲肝存在一些問題,我可以看到有一個意想不到的方括號關閉沒有任何數據。請在適當的檢查太... :-)「