2017-09-24 11 views
1

jsonパラメータをサーバに送信してみます。すべてのコードがありますが、バックスラッシュ文字に問題があります。 これはバックスラッシュ文字を含むテスト変数の結果です。サーバー側では無効な入力エラーがあり、サーバーはsendパラメーターを検出できないため、この文字を削除する必要があります。文字列から単一のbackSlashを削除する

" " {\ "force \":\ "1 \"、\ "from \":\ "0 \"、\ "flag \":\ "1 \"、\ " "propValueMask":\ "* \"、\ "itemsType \":\ "avl_resource \"、\ "sortType \":\ "\":\ " avl_resource \: "\ ""、\ "たpropName \ propType \ "\、" SYS_NAMEの\":\ "SYS_NAME \"}}"

private func RegisterForGetSourceList() { 

    var sid = "" 

    if let authEntity = AuthenticationManager.shareInstance.fetchAuthenticationEntity() { 

     if let tokenKey = authEntity.sID { 

     sid = tokenKey 
     } 
    } 

    let specParam = ["itemsType":"avl_resource","propName":"sys_name","propValueMask":"*","sortType":"sys_name","propType":"avl_resource"] 


     let paramJSON = ["spec":specParam,"force":"1","flag":"1","from":"0","to":"0"] as [String : Any] 

     do { 

      let paramData = try JSONSerialization.data(withJSONObject: paramJSON, options: .prettyPrinted) 

      if let paramString = NSString(data: paramData, encoding: String.Encoding.utf8.rawValue) as String? { 

      var test = String(paramString.characters.filter { !" \n\t\r".characters.contains($0) }) 

      test = test.replacingOccurrences(of: "\\", with: "", options: NSString.CompareOptions.literal, range: nil) 

    let parameters = [Constant.SVC:Constant.SEARCH_ITEMS_SVC,Constant.SID:sid,Constant.PARAM:test] as [String : Any] 

LibraryAPI.shareInstance.RunHttpPostJSONRequest(parameters: parameters, contentType: "JSON", closure: { success, error in 

       if let result = success as? [String:Any] { 


       if let eid = result["eid"] as? String { 



       } 

       } 

       else if error != nil { 

       print(error?.localizedDescription ?? "there was an error in get response") 
       } 
      }) 

     } 
    } 
    catch { 

     print(error.localizedDescription) 
    } 
} 

i」がテーマのすべてに置き換える提案された、多くのリンクを読みます\ "でも動作していません。 誰かがこの問題を解決するための提案をしています ありがとう

+2

バックスラッシュが仮想です。リテラル文字列に二重引用符を表示する必要があります。それらはサーバーに送られません**。 – vadian

+2

...そして、文字列をきれいに印刷して後で空白と行区切り記号を削除するのはナイスではありません。サーバーは審美性について全く気にしません。オプションを削除します。 – vadian

答えて

1

vadianが提案したように、文字列backsla shesは仮想であり、サーバーに送信されません。

デバッグのためのJSONを印刷したい場合は、私はこの方法をお勧めします:

var json = try JSONSerialization.jsonObject(with: paramData, options: .allowFragments) 

は、これはあなたのDO-catchブロック内にラップされていることを確認します。

あなたは文字列としてJSONをしたい場合は、あなたが行うことができます:

let convertedString = String(data: paramData, encoding: .utf8) 
+0

はい、とにかくOPはデバッグ以外の文字列表現をまったく使用せずに、JSON *データ*をオブジェクトに変換する必要があります。これはよくある間違いです。コンバージョンを行うにはJSON文字列は必要ありません。 – Moritz

関連する問題