2017-04-08 117 views
0

我正在使用RESTful API向遠程服務器發出請求。我創建了一個字典,然後使用JSONSerialization將其序列化爲Data。問題是,當序列化日期時間dd/mm/yyyy它會自動添加一個\字符。此問題可能是由於從字典轉換爲數據或數據轉換爲字符串。我不完全清楚。Swift 3 JSONSerialization序列化字典包含字符

如何刪除此字符\

下面是我的應用程序代碼:

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", 
    .... 
} 

感謝您的支持。

+0

您關心的反斜線或不在服務器接受的格式?根據JSON規格斜槓可以逃脫 – vadian

+0

服務器端的開發者反饋我這個問題。這個系統已經有一個應用程序在Android上運行,所以我必須糾正這一步。 – Robust

+0

轉義正斜槓是完全有效的,所以它應該在服務器端進行糾正。 – vadian

回答

0

您可以通過修剪字符串來解決問題。

current = current.stringByTrimmingCharactersInSet(NSCharacterSet.init(charactersInString: "\")) 
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 
}