我正在尝试将一些简单的 HTML 转换为 JSON 对象中的字符串值,但我无法让字符串编码不转义 NSJSONSerialization 中的字符串。
示例...我有一个包含一些基本 HTML 文本的字符串:
NSString *str = @"<html><body><p>Samples / Text</p></body></html>";
期望的结果是带有 HTML 作为值的 JSON:
{
"Title":"My Title",
"Instructions":"<html><body><p>Samples / Text</p></body></html>"
}
我正在使用标准技术将 NSDictionary 转换为包含 JSON 的 NSString:
NSMutableDictionary *dict = [NSMutableDictionary dictionary];
[dict setObject:str forKey:@"Instructions"];
[dict setObject:@"My Title" forKey:@"Title"];
NSError *err;
NSData *data = [NSJSONSerialization dataWithJSONObject:dict options:NSJSONWritingPrettyPrinted error:&err];
NSString *resultingString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
NSLog(@"%@", resultingString);
此方法生成的 JSON 是有效的,但是 HTML 已转义所有正斜杠:
{
"Title":"My Title",
"Instructions":"<html><body><p>Samples \/ Text<\/p><\/body><\/html>"
}
这会在说明 JSON 字符串中创建无效的 HTML。
我想坚持使用 NSJSONSerialization,因为我们在框架中的其他任何地方都使用它,并且在切换到非 Apple 库之前我已经被烧毁了,因为它们被取消支持。我尝试了许多不同的字符串编码,它们都避开了尖括号。
显然 \/ 是 JavaScript 中 / 字符的有效表示,这就是转义正斜杠的原因(甚至 StackOverflow 文本编辑器也转义了它)。请参阅: 使用正斜杠转义 json 字符串? 还有JSON:为什么要转义正斜杠?. 我只是不希望它这样做,而且似乎没有办法阻止 iOS 在序列化时转义字符串值中的正斜杠。