搜尋

首頁  >  問答  >  主體

objective-c - iOS中使用NSSerialization把物件轉為JSON字串後,多出來反斜線的問題

代碼

   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字符串,所以還是希望正麵解決掉。

標題文字

迷茫迷茫2806 天前937

全部回覆(3)我來回復

  • PHP中文网

    PHP中文网2017-04-22 09:01:59

    這個不需要做處理的,直接用就是了。
    如果直接取出顯示在 Label 上,內部做過轉義的。所以無需理會。
    可以參考我寫的部落格《IOS 7 利用系統自備庫進行 POST JSON 非同步存取操作》

    回覆
    0
  • PHPz

    PHPz2017-04-22 09:01:59

    關於 json 標準文檔中 是否应该转义成/, 我并没细究. 但是很多开源实现 decode 的时候是不会将/转回的. 因此我並不同意樓上說的觀點, 某些情況下必須要處理, 但我不知道官方NSJSONSerialization的處理方法, 所以改用開源的 jsonkit 繞過了這個問題

    回覆
    0
  • 伊谢尔伦

    伊谢尔伦2017-04-22 09:01:59

    蘋果就是這麼任性手動替換一下吧類似:

    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];
    

    請見:
    how to prevent NSJSONSerialization from adding extra escapes in URL
    NSJSONSerialization serialization of a string containing forward slashes / and HTML is escaped incorrectly

    回覆
    0
  • 取消回覆