代码
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
처리할 필요 없이 바로 사용하면 됩니다.
직접 꺼내서 Label에 표시하면 내부적으로 이스케이프됩니다. 그러니 귀찮게 하지 마세요.
제가 작성한 블로그 "IOS 7은 시스템 자체 라이브러리를 사용하여 POST JSON 비동기 액세스 작업을 수행합니다"를 참조하세요.
PHPz2017-04-22 09:01:59
json 표준 문서의 을
/
으로 이스케이프해야 하는지 여부에 대해서는 자세히 연구하지 않았습니다. 그러나 많은 오픈 소스 디코딩 구현에서는 /
을 다시 로 변환하지 않습니다. , 위에서 말한 내용에 동의하지 않습니다. 경우에 따라 처리해야 하지만 공식적인 NSJSONSerialization 처리 방법을 모르기 때문에 이 문제를 피하기 위해 오픈 소스 jsonkit으로 전환했습니다
伊谢尔伦2017-04-22 09:01:59
Apple은 변덕스럽기 때문에 다음과 같이 수동으로 교체할 수 있습니다.
으아악참조:
NSJSONSerialization이 URL에 추가 이스케이프를 추가하는 것을 방지하는 방법
슬래시가 포함된 문자열의 NSJSONSerialization 직렬화 및 HTML이 잘못 이스케이프됩니다