2011-08-06 548 views
1

我正在爲iOS使用SBJson框架(也稱爲json-framework)。JSON解析錯誤

解析某個JSON文件時,出現以下錯誤: -JSONValue失敗。錯誤是:未轉義的控制字符[0x09]'

我已經多次使用此框架,並且我也在同一個應用程序中解析了非常類似的JSON文件(甚至更長),它工作正常。

我試着扔了一堆NSLogs,一切似乎都很好。有人能告訴我這個錯誤是什麼意思,或者至少該如何繼續調試這樣的錯誤?

這裏是一個顯示錯誤的代碼:

- (void)downloadSchedule:(NSString *)jsonString { 

    // Get JSON feed URL and instantiate a dictionary object with its content 
    NSDictionary *topDic = [jsonString JSONValue]; 

    NSLog(@"topDic count %d", [topDic count]); 

topDic被表示爲0的計數的錯誤是在[jsonString JSONValue]線。

謝謝

回答

3

我想你的文件包含一個未編碼的標籤(ascii 0x09),根據json語法應該用\t代替。

2

看一看http://www.json.org/有一些需要進行轉義由JSON正確解析字符。這是原因。該文件是不正確的JSON。

8

我有一個很好的解決方案。應用此方法來移除轉義字符。

-(NSString *)removeUnescapedCharacter:(NSString *)inputStr 
{ 

NSCharacterSet *controlChars = [NSCharacterSet controlCharacterSet]; 

NSRange range = [inputStr rangeOfCharacterFromSet:controlChars]; 

    if (range.location != NSNotFound) 
    { 

     NSMutableString *mutable = [NSMutableString stringWithString:inputStr]; 

     while (range.location != NSNotFound) 
     { 

      [mutable deleteCharactersInRange:range]; 

      range = [mutable rangeOfCharacterFromSet:controlChars]; 

     } 

     return mutable; 

    } 

    return inputStr; 
} 

調用此方法與通過你的輸出字符串這樣

NSString *output = [NSString stringWithContentsOfURL:[NSURL URLWithString:@"yourUrlString"] encoding:NSUTF8StringEncoding error:nil]; 

output = [self removeUnescapedCharacter:output]; 
+0

請編輯您的答案並格式化代碼以使其可讀。 – kleopatra

+0

否。正確的解決方案是修復無效JSON的來源,而不是用這樣的黑客來解決它。 –

+0

但是對於有效的JSON,我們可以在PHP和I-Phone端修復它,以實現更安全的JSON解析。 – chandan

0

如果你的文件是有「\ n」或「\ r」之類的HTML qoutes的則可能在obj-導致錯誤C。 您可以添加:

[jsonString stringByReplacingOccurrencesOfString:@"\r\n" withString:@"<br />"]

我有同樣的問題,解決了用這個。