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

时间:2014-07-07 11:11:01

标签: objective-c nsstring

我正在生成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];

提前致谢。

2 个答案:

答案 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:@"\""];

否则你冒着删除假定存在的\字符的风险。