我正在生成json文本,在生成数组时,我得到了很多不需要的反斜杠:
[n
{n
"Speed" : 2,n
"Direction" : 3,n
"OdometerDelta" : 4,n
"Longitude" : 0,n
"Latitude" : 1,n
"TimeStamp" : "1996-06-17"n
},n
{n
"Speed" : 2,n
"Direction" : 3,n
"OdometerDelta" : 4,n
"Longitude" : 0,n
"Latitude" : 1,n
"TimeStamp" : "1996-06-17"n },n
{n
"Speed" : 2,n
"Direction" : 3,n
"OdometerDelta" : 4,n
"Longitude" : 0,n
"Latitude" : 1,n
"TimeStamp" : "1996-06-17"n
}n
]
这就是我获取生成的json文本NSString:的方式
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:arr options:NSJSONWritingPrettyPrinted error:&error];
NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
如果我使用,这是事情变得有趣的部分
jsonString = [jsonString stringByReplacingOccurrencesOfString:@"n" withString:@""];
所有的"\n"都被删除了(反斜杠也被删除了(,但如果我使用
jsonString = [jsonString stringByReplacingOccurrencesOfString:@"\" withString:@""];
所有的反斜杠仍然存在。我对objective-c还很陌生,所以我甚至想不出发生这种情况的可能方式,我尝试了几种方法,但都不起作用。我的猜测是问题是由编码引起的,但我可能错了。
以下是我如何生成json文件:
for(int i = 0; i < 3; i++)
{
NSDictionary *jsonDictionary = [NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithDouble:0.0], @"Longitude",
[NSNumber numberWithDouble:1.0], @"Latitude",
@"1996-06-17", @"TimeStamp",
[NSNumber numberWithDouble:2.0], @"Speed",
[NSNumber numberWithDouble:3.0], @"Direction",
[NSNumber numberWithDouble:4.0], @"OdometerDelta",
nil];
[arr addObject:jsonDictionary];
}
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:arr options:NSJSONWritingPrettyPrinted error:&error];
NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
提前谢谢。
此行
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:arr options:NSJSONWritingPrettyPrinted error:&error];
为您提供一个带有换行符、空格和缩进的JSON字符串,以便在查看时对其进行美观的格式化。它不会在数据中添加额外的换行符。如果你这样做:
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:arr options:0 error:&error];
JSON字符串将不会有任何额外的格式化字符,并且看起来都是一条很长的行。
您发布的输出看起来像调试输出,调试描述将转义这些n
字符和"
字符。在实际的字符串中,它们是正确的换行符(字符10(和双引号字符。这就是为什么第一个replace语句有效,因为@"n"
是一个只有字符10的单字符字符串。在第二个语句中,@"\"
是一个有反斜杠的单字符串,JSON字符串中没有实际的反斜杠。
sonString = [jsonString stringByReplacingOccurrencesOfString:@"n" withString:@""];
不会删除\n它会删除换行符,这就提出了一个问题,即如何获得显示的输出,是字符串中真正的内容,还是只是在输出时生成的信息,以显示换行符和引号,而不是字符串的末尾。
同样要从字符串中删除\",你真的应该这样做
jsonString = [jsonString stringByReplacingOccurrencesOfString:@"\"" withString:@"""];
否则,您将面临删除假定存在的\个字符的风险。