将NSDictionary转换为json字符串,替换/与\ /的问题

时间:2014-11-21 04:53:46

标签: objective-c json nsjsonserialization

我想将NSDictionary转换为json string.everything工作正常,我有一个小问题,描述如下: 我有以下代码将NSDictionary转换为NSString:

-(NSString *)dictToJson:(NSDictionary *)dict
{
    NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dict options:NSJSONWritingPrettyPrinted error:nil];
   return  [[NSString alloc] initWithBytes:[jsonData bytes] length:[jsonData length] encoding:NSUTF8StringEncoding];
}

我将该方法称为:

NSLog(@"%@", [self dictToJson:@{@"hello" : @"21/11/2014 10:07:42 AM"}]);

以下是此NSLog的输出:

{
  "hello" : "21\/11\/2014 10:07:42 AM"
}

我期待以下输出,我该如何实现它:

{
      "hello" : "21/11/2014 10:07:42 AM"
}

可以使用stringByReplacingOccurrencesOfString方法完成,但我不想使用它。还有其他方法可以实现同样的目标吗?

5 个答案:

答案 0 :(得分:22)

Nsdictionary - to - string

NSError * err;
NSData * jsonData = [NSJSONSerialization dataWithJSONObject:response options:0 error:&err];
NSString * myString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];

string - to - NSDictionary

NSError * err;
NSDictionary * response = (NSDictionary *)[NSJSONSerialization JSONObjectWithData:[NSData dataFromString:str] options:NSJSONReadingMutableContainers error:&err];

答案 1 :(得分:2)

试试这个,

NSData *json = [NSJSONSerialization dataWithJSONObject:dict
                                               options:0
                                                 error:&error];
NSString *jsonString = [[NSString alloc] initWithData:json encoding:NSUTF8StringEncoding];
// This will be the json string in the preferred format 
jsonString = [jsonString stringByReplacingOccurrencesOfString:@"\\/" withString:@"/"];

// And this will be the json data object 
NSData *processedData = [jsonString dataUsingEncoding:NSUTF8StringEncoding];

答案 2 :(得分:1)

使用选项PrettyPrinted转换为对数据的响应,然后使用utf8编码将数据转换为字符串 代码:

    NSDictionary *dictResponse = responseObject[0];

    NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dictResponse options:NSJSONWritingPrettyPrinted error:nil];


    NSString * myString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];

答案 3 :(得分:0)

将JSON对象转换为String将转义正斜杠。这就是为什么在结果中添加反斜杠的原因。

如果将字符串转换回JSON对象并记录对象,则可以按预期查看结果。因此,您可以验证字符串是否有任何问题。

答案 4 :(得分:0)

添加此

 -(NSString*) bv_jsonStringWithPrettyPrint:(BOOL) prettyPrint;  




-(NSString *)dictToJson:(NSDictionary *)dict {

     NSData *jsonData = [NSJSONSerialization dataWithJSONObject: dict
                                                   options:(NSJSONWritingOptions)    (prettyPrint ? NSJSONWritingPrettyPrinted : 0)
                                                     error:&error];

     if (!jsonData) {
        NSLog(@"bv_jsonStringWithPrettyPrint: error: %@", error.localizedDescription);
        return @"{}";
     } else {
        return [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
     } 

 }

参考此Generate JSON string from NSDictionary in iOS