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

joe*_*els 26 objective-c nsjsonserialization

如何防止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"}
Run Code Online (Sandbox Code Playgroud)

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

joe*_*els 19

这对我有用

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];
Run Code Online (Sandbox Code Playgroud)

  • @LevWalkin"\ /\/"微笑将被编码为"\\/\\ /",将"\ /"替换为"/"后,它将再次为"'\ /\/" (3认同)

小智 6

如果您的目标是 >= iOS 13.0,则只需将 .withoutEscapingSlashes 添加到选项中。

例子:

let data = try JSONSerialization.data(withJSONObject: someJSONObject, options: [.prettyPrinted, .withoutEscapingSlashes])

print(String(data: data, encoding: String.Encoding.utf8) ?? "")
Run Code Online (Sandbox Code Playgroud)


sta*_*Man 5

是的,这很令人讨厌,甚至更令人讨厌,因为似乎没有对此的“快速”修复(即,用于NSJSONSerialization)

来源:
http : //www.blogosfera.co.uk/2013/04/nsjsonserialization-serialization-of-a-string- contains-forward-slashes-and-html-is-escaped-incorrectly /

NSJSON字符串的序列化包含正斜杠/和HTML被错误地转义


(这里只是在黑暗中拍摄,请耐心
等待)。如果您要制作自己的JSON,则只需从字符串中制作一个NSData对象,然后将其发送到服务器。
无需通过NSJSONSerialization。

就像是:

NSString *strPolicy = [info description];
NSData *policyData = [strPolicy dataUsingEncoding:NSUTF8StringEncoding];
Run Code Online (Sandbox Code Playgroud)

我知道这不会那么简单,但是...嗯...反正