如何删除 NSString 对象中多余的转义字符

Posted

技术标签:

【中文标题】如何删除 NSString 对象中多余的转义字符【英文标题】:how to delete the Superfluous Escape-character in a NSString object 【发布时间】:2013-03-18 14:02:03 【问题描述】:

我是 ios 开发的新手。 当我用 NSJSONSerialization 处理 json 时,我发现对我来说确实是个问题。

NSLog(@"response: %@", responseString);
NSData *jsonData = [responseString dataUsingEncoding:NSUTF8StringEncoding];
NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableContainers error:nil];
NSLog(@"dict: %@", dict);

输出是:

2013-03-18 20:13:56.228 XXXX[3550:5003] response: "status":"success","data":"\"title\":\"\",\"sessionName\":\"sid\",\"sessionID\":\"9217e5df3db6b4b4aa3eed800890069f\",\"rand\":5360","md5":"292ee1e78628fc6360c647e938c4f1ea"
2013-03-18 20:13:56.229 XXXX[3550:5003] dict: 
data = "\"title\":\"\",\"sessionName\":\"sid\",\"sessionID\":\"9217e5df3db6b4b4aa3eed800890069f\",\"rand\":5360";
md5 = 292ee1e78628fc6360c647e938c4f1ea;
status = success;

带有“\”的数据部分不能是 NSDictionary 对象

那么我应该怎么做才能让它正确呢?

对不起,我的英语不好。

【问题讨论】:

【参考方案1】:

无论出于何种原因,“data”的值不是 JSON 字典,而是包含 JSON 数据的字符串。您可以通过再次将JSONObjectWithData 应用于此字符串并替换字典中的值来解决此问题:

NSData *jsonData = [responseString dataUsingEncoding:NSUTF8StringEncoding];
NSMutableDictionary *dict = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableContainers error:nil];

NSData *nestedJsonData = [[dict objectForKey:@"data"] dataUsingEncoding:NSUTF8StringEncoding];
NSDictionary *nestedDict = [NSJSONSerialization JSONObjectWithData:nestedJsonData options:NSJSONReadingMutableContainers error:nil];

[dict setObject:nestedDict forKey:@"data"];
NSLog(@"dict: %@", dict);

输出:

dict: 
    data =     
        rand = 5360;
        sessionID = 9217e5df3db6b4b4aa3eed800890069f;
        sessionName = sid;
        title = "";
    ;
    md5 = 292ee1e78628fc6360c647e938c4f1ea;
    status = success;

【讨论】:

当然,更好的解决方案是服务器发送正确的 JSON 数据:-) 现在我想知道这是如何工作的?为什么 JSONObjectWithData 会删除所有这些字符? @ct455332:转义字符实际上不在字符串中。它们仅由 NSLog() 打印。如果您单步执行代码并查看变量,您应该会看到它是如何工作的。

以上是关于如何删除 NSString 对象中多余的转义字符的主要内容,如果未能解决你的问题,请参考以下文章

idea还原转义json

kettle之行转列,删除多余连接符

拼接字符串时,去掉最后一个多余的逗号

如何以编程方式从 NSString 中删除特定字符?

如何从列中删除多余的字符?

如何转义 NSPredicate 格式字符串中的尾部反斜杠