Rumah  >  Soal Jawab  >  teks badan

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

标题文字

迷茫迷茫2736 hari yang lalu883

membalas semua(3)saya akan balas

  • PHP中文网

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

    Ini tidak perlu diproses, hanya gunakan terus.
    Jika ia dikeluarkan terus dan dipaparkan pada Label, ia akan terlepas secara dalaman. Jadi tak payahlah.
    Anda boleh merujuk kepada blog yang saya tulis "IOS 7 menggunakan perpustakaan sistem sendiri untuk melaksanakan operasi capaian tak segerak POST JSON"

    balas
    0
  • PHPz

    PHPz2017-04-22 09:01:59

    Berkenaan sama ada dalam dokumen standard json harus dilepaskan ke /, saya belum mempelajarinya secara terperinci Namun, banyak pelaksanaan penyahkodan sumber terbuka tidak akan menukar / kembali kepada , Saya tidak bersetuju dengan perkara di atas, ia mesti dikendalikan dalam beberapa kes, tetapi saya tidak tahu kaedah pemprosesan NSJSONSerialization rasmi, jadi saya beralih kepada jsonkit sumber terbuka untuk memintas masalah ini

    balas
    0
  • 伊谢尔伦

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

    Apple sangat berubah-ubah dan boleh diganti secara manual, serupa dengan:

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

    Lihat:
    cara untuk menghalang NSJSONSerialization daripada menambah escape tambahan dalam URL
    NSJSONSerialization serialization bagi rentetan yang mengandungi garis miring ke hadapan / dan HTML dilepaskan secara salah

    balas
    0
  • Batalbalas