objective-c - iOS中使用NSSerialization把对象转为JSON字符串后,多出来反斜杠的问题
迷茫
迷茫 2017-04-22 08:59:59
0
3
907

代码

   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字符串,所以还是希望正面解决掉。

标题文字

迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

répondre à tous(3)
Ty80

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"

PHPzhong

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

伊谢尔伦

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

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal