Maison > Questions et réponses > le corps du texte
代码
NSDictionary *dic = @{@"url": @"http://..."};
NSLog(@"%@", dic);
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dic options:NSJSONWritingPrettyPrinted error:nil];
NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
NSLog(@"%@", jsonString);
执行结果:
2014-06-12 14:44:19.427 main[64877:1322484] {
url = "http://...";
}
2014-06-12 14:44:19.429 main[64877:1322484] {
"url" : "http:\/\/..."
}
转换后的json字符串中url地址被转义了 :(
使用字符串替换可以事后弥补:
[jsonString stringByReplacingOccurrencesOfString:@"\\" withString:@""];
如何事先预防呢?
PS:在和UIWebView进行js调用时需要不转义的json字符串,所以还是希望正面解决掉。
PHP中文网2017-04-22 09:01:59
Cela n'a pas besoin d'être traité, utilisez-le simplement directement.
S'il est retiré directement et affiché sur l'étiquette, il sera échappé en interne. Alors ne vous embêtez pas.
Vous pouvez vous référer au blog que j'ai écrit "IOS 7 utilise la propre bibliothèque du système pour effectuer des opérations d'accès asynchrone POST JSON"
PHPz2017-04-22 09:01:59
Concernant la question de savoir si dans le document standard json doit être échappé en
/
, je ne l'ai pas étudié en détail. Cependant, de nombreuses implémentations open source du décodage ne reconvertiront pas /
en . , je ne suis pas d'accord avec le point ci-dessus, cela doit être géré dans certains cas, mais je ne connais pas la méthode officielle de traitement NSJSONSerialization, je suis donc passé au jsonkit open source pour éviter ce problème
伊谢尔伦2017-04-22 09:01:59
Apple est tellement capricieux, remplaçons-le manuellement, comme :
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];
Voir :
comment empêcher NSJSONSerialization d'ajouter des échappements supplémentaires dans l'URL
NSJSONSerialization sérialisation d'une chaîne contenant des barres obliques / et HTML est échappé de manière incorrecte