2017-04-08 14 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 
} 
関連する問題