带有NSJSONSerialization问题的NSDictionary到JSON

时间:2014-07-14 23:34:55

标签: ios nsdictionary nsjsonserialization

我有NSDictionary(参数),其中包含以下数据:

{
    deviceType = iPhone;
    ordersActionList = ({
            endDate = "07/14/2014 14:32";
            orderId = 2807171;
            reason = "Some reason";
        }
    );
}

当我使用NSJSONSerialization解析上述内容时:

NSError *err;
NSData *jsonData =[NSJSONSerialization dataWithJSONObject:params options:0 error:&err]; 

它将转义字符添加到endDate,endDate显示如下:

 `"endDate": "07\/14\/2014 14:32"`

这是不正确的,有人建议我在使用NSJSONSerialization进行序列化时如何避免JSON中的转义字符?

编辑: 这是我现在的工作,但我不喜欢这样做,我希望有更好的解决方案:

-(NSData*) converToNSData:(NSDictionary *)params
{
    NSError * err;
    NSData *jsonData =[NSJSONSerialization dataWithJSONObject:params options:0 error:&err];

    NSString *jsonStr1 = [NSString stringWithUTF8String:[jsonData bytes]];
    jsonStr1 = [jsonStr1 stringByReplacingOccurrencesOfString:@"\\/" withString:@"/"];

    NSData *jsonData2 =[jsonStr1 dataUsingEncoding:NSUTF8StringEncoding];

    return jsonData2;
}

3 个答案:

答案 0 :(得分:3)

如果您正在谈论避免在日期中使用转义斜线,那么NSJSONSerialization就无法做到。但请注意,生成的JSON数据完全有效,如果对其进行反序列化,则会获得原始数据。

如果您仍想删除反斜杠,则必须将结果转换为NSString并自行搜索/替换。

相关: how to prevent NSJSONSerialization from adding extra escapes in URL

答案 1 :(得分:0)

您可以这样做,但是如果您的数据有两个反斜杠,它们将被删除。如果您可以保证您的数据没有两个反斜杠,那就没问题。

NSString *newString = [[yourDict objectForKey:@"endDate"] 
stringByReplacingOccurrencesOfString:@"\\" withString:@""];

答案 2 :(得分:0)

   var returnString:String?
    do
    {
        let jsonData = try JSONSerialization.data(withJSONObject: dict, options: JSONSerialization.WritingOptions.prettyPrinted)

        if let json = String(data: jsonData, encoding: .utf8) {
            returnString=json.replacingOccurrences(of: "\\", with: "")
        }

    }
    catch {
        print("something went wrong with parsing json")
    }