我正在生成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];
提前致谢。
答案 0 :(得分:11)
这一行
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:arr options:NSJSONWritingPrettyPrinted error:&error];
为您提供一个带有换行符,空格和缩进的JSON字符串,以便在您查看时将其格式化。它不在数据中添加额外的换行符。如果你这样做:
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:arr options:0 error:&error];
JSON字符串不会包含任何额外的格式化字符,并且看起来都是一个非常长的行。
您发布的输出看起来像调试输出,调试描述会转义那些\n
字符和\"
字符。在实际字符串中,它们是正确的换行符(字符10)和双引号字符。这就是你的第一个替换语句有效的原因,因为@"\n"
是一个只有字符10的单字符串。在您的第二个语句中@"\\"
是一个带有反斜杠的单字符串,并且JSON字符串中没有实际的反斜杠。
答案 1 :(得分:0)
sonString = [jsonString stringByReplacingOccurrencesOfString:@"\n" withString:@""];
不会删除\ n它会删除换行符,这引发了一个问题:如何获得你显示的输出,是字符串中的实际内容,还是输出上生成的信息,以显示什么是换行符和引号而不是字符串的结尾。
同时删除\&#34;从你的字符串你真的应该这样做
jsonString = [jsonString stringByReplacingOccurrencesOfString:@"\\\"" withString:@"\""];
否则你冒着删除假定存在的\字符的风险。