Ios 如何将转义的JSON字符串转换为NSString?

Ios 如何将转义的JSON字符串转换为NSString?,ios,objective-c,json,Ios,Objective C,Json,我正在使用http服务器,它在响应体中返回JSON字符串: "Some text.\nSome text.\n\t\"Some text in quotes.\"" 我需要删除字符串开头和结尾的引号,并且我需要unescape特殊符号。我为NSString创建了类别,但我认为这是错误的实现: 我有其他想法。我可以使用NSJSONSerialization: NSString *sourceString = @"\"Some text.\\nSome text.\\n\\t\\\"Some te

我正在使用http服务器,它在响应体中返回JSON字符串:

"Some text.\nSome text.\n\t\"Some text in quotes.\""
我需要删除字符串开头和结尾的引号,并且我需要unescape特殊符号。我为NSString创建了类别,但我认为这是错误的实现: 我有其他想法。我可以使用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"];

但是。。。默认情况下,基金会只解析JSON对象或数组,但是如果您告诉它接受JSON片段:它可以解析字符串、数字和布尔值:

NSData*data=[@“\”一些文本。\\n一些文本。\\n\\t\\\“引号中的一些文本。\\\\”
数据使用编码:NSUTF8StringEncoding];
id结果=[NSJSONSerialization JSONObjectWithData:data
选项:NSJSONReadingAllowFragments
错误:NULL];
NSLog(@“[结果类]=%@,[结果类]);
NSLog(@“结果=%@”,结果);
收益率:

这实际上是传递
错误
确实有帮助的情况之一。我在没有传递
nsjson读取AllowFragments
的情况下进行了尝试,得到了一条非常明确的错误消息:

Error Domain=NSCOCAERRORDOMAIN Code=3840“操作无法完成。(可可错误3840)。”(JSON文本未以数组或对象开头,并且未设置允许片段的选项。


向其传递指向NSError的指针,并在序列化失败后记录错误。这会告诉你问题出在哪里。@JeremyP,谢谢你的主意,但我真的没有问题,我脑子里有问题。:)我想,这可能是一个更漂亮的方法。你是如何得到响应的?@ColdLogic,使用了NSConnection并将NSData转换为NSString。@ColdLogic,是的,服务器开发人员正在做这个编码响应,但我已经厌倦了与他争论这个问题(我不需要在服务器上进行响应编码)。谢谢!为什么之前找不到选项NSJSONReadingAllowFragments?:)“因此,字符串本身就是完全有效的JSON”。并非如此,请参见此处以获取参考:。OP面临的问题来自其他地方,可能是服务器端的编码不正确。@CouchDeveloper更新了我的答案。谢谢
[result class] = __NSCFString
result = Some text.
Some text.
  "Some text in quotes."