Swift 3 JSONSerialization序列化字典包含\ character

时间:2017-04-08 17:01:52

标签: ios json serialization swift3 httprequest

我正在使用RESTful API向远程服务器发出请求。我创建了一个字典,然后使用JSONSerialization将其序列化为Data。问题是序列化日期时间dd / mm / yyyy时会自动添加\字符。此问题可能是由于从Dictionary转换为Data或Data转换为String。我不确切地知道。

如何删除此\字符

以下是我在app上的代码:

var dic = [String : String]()
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "dd/MM/yyyy hh:mm:ss"
let current : String = dateFormatter.string(from: now)       
dic["RequestAt"] = current
// others set key-value
do {
    var request = URLRequest(url: URL(string: DOMAIN_NAME)!)
    request.httpMethod = "POST"
    request.timeoutInterval = 3
    request.addValue("application/json charset=utf-8", forHTTPHeaderField: "Content-Type")
    request.addValue("application/json charset=utf-8", forHTTPHeaderField: "Accept")
    let d = try JSONSerialization.data(withJSONObject: dic, options: [])
    let str = String.init(data: d, encoding: .utf8)
    print(str ?? "NOTHING") // Same result as server's receive
    request.httpBody = d
    let session = URLSession.shared

    session.dataTask(with: request) { data, response, err in
        //handle callback
    }.resume()

} catch let error {        
    print(error.localizedDescription)
}

但是服务器端接收json:

{
    "RequestAt":"08\/04\/2017 11:42:03",
    ....
}

感谢您的支持。

2 个答案:

答案 0 :(得分:0)

你可以通过修剪字符串解决问题。

current = current.stringByTrimmingCharactersInSet(NSCharacterSet.init(charactersInString: "\"))

答案 1 :(得分:0)

我决定使用Alamofire提出请求。它只是一个临时解决方案,因为它必须使用第三方库。

我现在做的事情:

let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "dd/MM/yyyy hh:mm:ss"
let current : String = dateFormatter.string(from: now)   
let parameters: Parameters = [
    "RequestAt": current,
     ...
]

// Both calls are equivalent
Alamofire.request(DOMAIN_NAME, method: .post, parameters: parameters, encoding: JSONEncoding.default).responseJSON { response in
    //handle callback
}