我正在为iOS使用SBJson框架(也称为json-framework)。
解析某个JSON文件时,我收到以下错误: -JSONValue失败。错误是:未转义的控制字符[0x09] '
我已经多次使用过这个框架了,而且我在同一个应用程序中解析了一个非常相似的JSON文件(甚至更长),并且工作正常。
我试着扔掉一堆NSLog,一切似乎都很好。有人可以指出这个错误意味着什么,或者至少如何继续调试这样的错误?
以下是显示错误的代码:
- (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]
行。
谢谢
答案 0 :(得分: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];
答案 1 :(得分:3)
我猜你的文件包含一个未编码的标签(ascii 0x09
),应该根据json语法用\t
替换。
答案 2 :(得分:2)
查看http://www.json.org/有些字符需要转义才能被JSON正确解析。这是原因。该文件不是JSON。
答案 3 :(得分:0)
如果你的文件有'\ n'或'\ r'类型的html qoutes,那么它可能会导致obj-c错误。 您可以添加:
[jsonString stringByReplacingOccurrencesOfString:@"\r\n" withString:@"<br />"]
我遇到了同样的问题,并解决了这个问题。