删除objective-c中的反斜杠(';\';)

删除objective-c中的反斜杠(';\';),objective-c,nsstring,Objective C,Nsstring,我正在生成json文本,在生成数组时,我得到了很多不需要的反斜杠: [\n  {\n    \"Speed\" : 2,\n    \"Direction\" : 3,\n    \"OdometerDelta\" : 4,\n    \"Longitude\" : 0,\n    \"Latitude\" : 1,\n    \"TimeStamp\" : \"1996-06-

我正在生成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];
for(int i=0;i<3;i++)
{
NSDictionary*jsonDictionary=[NSDictionary Dictionary WithObjectsAndKeys:
[NSNumber numberWithDouble:0.0],@“经度”,
[NSNumber numberWithDouble:1.0],@“纬度”,
@“1996-06-17”@“时间戳”,
[NSNumber numberWithDouble:2.0],@“速度”,
[NSNumber numberWithDouble:3.0],@“方向”,
[NSNumber numberWithDouble:4.0],@“OdometerDelta”,
零];
[arr addObject:jsonDictionary];
}
NSData*jsonData=[NSJSONSerialization dataWithJSONObject:arr选项:NSJSONWritingPrettyPrinted error:&error];
NSString*jsonString=[[NSString alloc]initWithData:jsonData编码:NSUTF8StringEncoding];
提前谢谢

sonString = [jsonString stringByReplacingOccurrencesOfString:@"\n" withString:@""];
不会删除\n它将删除换行符,这就提出了一个问题:您是如何获得显示的输出的,是字符串中真正包含的内容,还是仅在输出时生成的信息,以显示什么是换行符和引号,而不是字符串的结尾

另外,要从字符串中删除\“,您应该这样做

jsonString = [jsonString stringByReplacingOccurrencesOfString:@"\\\"" withString:@"\""];
否则,您可能会删除\个假定存在的字符。

此行

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字符串中没有实际的反斜杠。

了解是什么产生了您发布的JSON输出非常重要。例如,它可能为您添加了转义,以便使换行符可见。因此,请指定您是如何获得该输出的。您的问题是您显然将JSON“序列化”了两次。解决这个问题,而不是在事情发生后试图消除混乱。@trojanfoe只是添加了我如何生成JSON的代码。我更感兴趣的是知道你是如何得到文本的,而不是代码。例如,它是
NSLog()
还是调试器?@HotLicks我不明白第二次序列化的地方。你能再解释一下吗?我认为追求这条路线是不正确的;@HotLicks在注释中采用的方法更好,在注释中,首先防止转义比之后删除要好。删除\n不是这里的问题。我的问题是“stringByReplacingOccurrencesOfString”在我的情况下不起作用,我尝试了你刚才建议的方法,但没有起作用。@MisterMortal-用stringByReplacingOccurrencesOfString替换包含“\”的字符串非常棘手。这是可以做到的,但需要仔细考虑这个场景。你的意思可能是“不放额外的反斜杠…”@MartinR所说的“数据”是指JSON字符串和数字中的数据。问题示例中的所有换行符都只是格式化,对所表示的数据的语义没有影响。