如何防止NSJSONSerialization在我的URL字符串中添加额外的反斜杠?
NSDictionary *info = @{@"myURL":@"http://www.example.com/test"};
NSData data = [NSJSONSerialization dataWithJSONObject:info options:0 error:NULL];
NSString *string = [[NSString alloc] initWithData:policyData encoding:NSUTF8StringEncoding];
NSLog(@"%@", string);//{"myURL":"http:\/\/www.example.com\/test"}
我可以去除反斜杠并使用该字符串,但如果可能的话我想跳过这一步......
是的,这是非常恼人的,甚至更多,因为它似乎没有“快速”解决这个问题(即NSJSONSerialization)
资源: http://www.blogosfera.co.uk/2013/04/nsjsonserialization-serialization-of-a-string-containing-forward-slashes-and-html-is-escaped-incorrectly/ 要么 NSJSONSerialization serialization of a string containing forward slashes / and HTML is escaped incorrectly
(只是在黑暗中拍摄,所以忍受我) 如果您正在制作自己的JSON,那么只需从字符串中创建一个NSData对象并将其发送到服务器即可。 无需通过NSJSONSerialization。
就像是:
NSString *strPolicy = [info description];
NSData *policyData = [strPolicy dataUsingEncoding:NSUTF8StringEncoding];
我知道它不会那么简单但是......嗯......反正
这对我有用
NSDictionary *policy = ....;
NSData *policyData = [NSJSONSerialization dataWithJSONObject:policy options:kNilOptions error:&error];
if(!policyData && error){
NSLog(@"Error creating JSON: %@", [error localizedDescription]);
return;
}
//NSJSONSerialization converts a URL string from http://... to http:\/\/... remove the extra escapes
policyStr = [[NSString alloc] initWithData:policyData encoding:NSUTF8StringEncoding];
policyStr = [policyStr stringByReplacingOccurrencesOfString:@"\\/" withString:@"/"];
policyData = [policyStr dataUsingEncoding:NSUTF8StringEncoding];
我已经跟踪了这个问题很多年了,但仍然没有修复。我相信苹果公司永远不会因为遗留原因而修复它(它会破坏它)。
Swift 4.2中的解决方案:
let fixedString = string.replacingOccurrences(of: "\\/", with: "/")
它将用\/
替换所有/
,并且这样做是安全的。