我正在使用一个http服务器,它在响应正文中返回JSON字符串:
"Some text.\nSome text.\n\t\"Some text in quotes.\""
我需要在字符串的开头和结尾删除引号,我需要unescape特殊符号。我为NSString制作了类别,但我认为这是错误的实现:https://gist.github.com/virasio/59907e087f859e6c1723 我有其他的想法。我可以使用NSJSONSerialization:
NSString *sourceString = @"\"Some text.\\nSome text.\\n\\t\\\"Some text in quotes.\\\"\"";
NSString *jsonObject = [NSString stringWithFormat:@"{ \"value\" : %@ }", sourceString];
NSDictionary *object = [NSJSONSerialization JSONObjectWithData:[jsonObject dataUsingEncoding:NSUTF8StringEncoding options:0 error:NULL]];
NSString *result = [object objectForKey:@"value"];
但是......这也不好。
答案 0 :(得分:8)
默认情况下,Foundation只会解析JSON对象或数组,但如果你告诉它接受JSON片段,它可以解析字符串,数字和布尔值:
NSData *data = [@"\"Some text.\\nSome text.\\n\\t\\\"Some text in quotes.\\\"\""
dataUsingEncoding:NSUTF8StringEncoding];
id result = [NSJSONSerialization JSONObjectWithData:data
options:NSJSONReadingAllowFragments
error:NULL];
NSLog(@"[result class] = %@", [result class]);
NSLog(@"result = %@", result);
收率:
[result class] = __NSCFString result = Some text. Some text. "Some text in quotes."
这实际上是传递error
确实有帮助的情况之一。我试过没有通过NSJSONReadingAllowFragments
并得到一个非常明确的错误信息:
错误Domain = NSCocoaErrorDomain Code = 3840“操作无法完成。(Cocoa error 3840。)”( JSON文本没有以数组或对象开头,并且选项允许未设置片段。)