代码
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字符串,所以还是希望正面解决掉。
これは処理する必要はなく、そのまま使用してください。
直接取り出してラベルに表示すると内部でエスケープされます。だから、気にしないでください。
私が書いたブログ「IOS 7 はシステム独自のライブラリを使用して POST JSON 非同期アクセス操作を実行する」を参照してください
json標準ドキュメントの
について そのため、場合によっては上記の考え方に同意できないのですが、公式のNSJSONSerializationの処理方法が分からないので、 に切り替えました。この問題を回避するには、オープンソースの jsonkit を使用してください
是否应该转义成
/
, 我并没细究. 但是很多开源实现 decode 的时候是不会将/
转回Apple は非常に気まぐれなので、次のように手動で置き換えてください:
リーリー参照:
NSJSONSerialization が URL に余分なエスケープを追加しないようにする方法
スラッシュを含む文字列の NSJSONSerialization シリアル化 / および HTML が誤ってエスケープされる