如何通过使用Objective-C转义所有特殊字符将NSString转换为JSON
我创建了一个函数来生成一个完美的JSON字符串:如何通过使用Objective-C转义所有特殊字符将NSString转换为JSON,objective-c,json,Objective C,Json,我创建了一个函数来生成一个完美的JSON字符串: -(NSString *)NSStringToJson:(NSString *)str { NSMutableString *s = [NSMutableString stringWithString:str]; [s replaceOccurrencesOfString:@"\"" withString:@"\\\\" options:NSCaseInsensitiveSearch range:NSMakeRange(0, [s
-(NSString *)NSStringToJson:(NSString *)str
{
NSMutableString *s = [NSMutableString stringWithString:str];
[s replaceOccurrencesOfString:@"\"" withString:@"\\\\" options:NSCaseInsensitiveSearch range:NSMakeRange(0, [s length])];
[s replaceOccurrencesOfString:@"/" withString:@"\\/" options:NSCaseInsensitiveSearch range:NSMakeRange(0, [s length])];
[s replaceOccurrencesOfString:@"\n" withString:@"\\n" options:NSCaseInsensitiveSearch range:NSMakeRange(0, [s length])];
[s replaceOccurrencesOfString:@"\b" withString:@"\\b" options:NSCaseInsensitiveSearch range:NSMakeRange(0, [s length])];
[s replaceOccurrencesOfString:@"\f" withString:@"\\f" options:NSCaseInsensitiveSearch range:NSMakeRange(0, [s length])];
[s replaceOccurrencesOfString:@"\r" withString:@"\\r" options:NSCaseInsensitiveSearch range:NSMakeRange(0, [s length])];
[s replaceOccurrencesOfString:@"\t" withString:@"\\t" options:NSCaseInsensitiveSearch range:NSMakeRange(0, [s length])];
[s replaceOccurrencesOfString:@"\{" withString:@"\\{" options:NSCaseInsensitiveSearch range:NSMakeRange(0, [s length])];
[s replaceOccurrencesOfString:@"}" withString:@"\\}" options:NSCaseInsensitiveSearch range:NSMakeRange(0, [s length])];
return [NSString stringWithString:s];
}
问题
上述函数无法将下面给定的字符串转换为JSON字符串
üáñ~!@#$%^&*()_+-=[\]{}|;’:”,./<>?~
üáñ~!@$%^&*()_+-=[\]{}|;’:”,./?~
{“国家”:“233”,“电子邮件”:“名字”:
“üáñ~!@$%^&*(),./?-=[]];”,“姓氏”:“,”“手机”:“令牌”:“111”}
我正在使用验证字符串,而解析器显示错误。这太荒谬了。使用
NSJSONSerialization
你远没有转化所有需要转化的东西,你正在转化那些不需要转化的东西。除非您的目标是编写一个比现有的JSON序列化器更好的JSON序列化器,否则手工编写而不是使用专门为您设计的类来编写JSON序列化器是为MUG设计的
我不太明白你为什么要用两个反斜杠来转换双引号。当然,你根本不会处理字符串中的反斜杠。这就是问题所在,您需要编写自己的错误代码,而不是使用适当的库。(另一个问题是,您正在编写错误代码,我敢打赌,您实际上没有咨询过包含JSON标准的RFC)。这太荒谬了。使用
NSJSONSerialization
你远没有转化所有需要转化的东西,你正在转化那些不需要转化的东西。除非您的目标是编写一个比现有的JSON序列化器更好的JSON序列化器,否则手工编写而不是使用专门为您设计的类来编写JSON序列化器是为MUG设计的
我不太明白你为什么要用两个反斜杠来转换双引号。当然,你根本不会处理字符串中的反斜杠。这就是问题所在,您需要编写自己的错误代码,而不是使用适当的库。(另一个问题是,您正在编写错误代码,我敢打赌您实际上没有参考过包含JSON标准的RFC)。如果您使用的是
NSURLConnection
- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
NSError *error;
NSDictionary *output = [NSJSONSerialization
JSONObjectWithData:receivedData
options:kNilOptions
error:&error];
NSLog(@"output : %@",output);
}
如果您使用的是
NSURLConnection
- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
NSError *error;
NSDictionary *output = [NSJSONSerialization
JSONObjectWithData:receivedData
options:kNilOptions
error:&error];
NSLog(@"output : %@",output);
}