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



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

否则,您将面临删除假定存在的\个字符的风险。

最新更新