首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何防止NSJSONSerialization在URL中添加额外的转义

如何防止NSJSONSerialization在URL中添加额外的转义
EN

Stack Overflow用户
提问于 2013-10-29 06:14:09
回答 5查看 13.9K关注 0票数 29

如何防止NSJSONSerialization向我的URL字符串添加额外的反斜杠?

代码语言:javascript
复制
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"}

我可以去掉反斜杠并使用字符串,但如果可能的话,我想跳过这一步.

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2013-10-29 06:35:11

是的,这很让人恼火,甚至更令人恼火,因为它似乎没有“快速”的解决办法(即对于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。

类似于:

代码语言:javascript
复制
NSString *strPolicy = [info description];
NSData *policyData = [strPolicy dataUsingEncoding:NSUTF8StringEncoding];

我知道事情不会这么简单但是..。嗯..。不管怎样,

票数 5
EN

Stack Overflow用户

发布于 2014-07-17 15:09:43

这对我来说很管用

代码语言:javascript
复制
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];
票数 20
EN

Stack Overflow用户

发布于 2020-01-20 19:42:17

如果目标是>= iOS 13.0,那么只需将.withoutEscapingSlashes添加到选项中即可。

示例:

代码语言:javascript
复制
let data = try JSONSerialization.data(withJSONObject: someJSONObject, options: [.prettyPrinted, .withoutEscapingSlashes])

print(String(data: data, encoding: String.Encoding.utf8) ?? "")
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19651009

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档