2017-09-24 2 views
1

Ich versuche, JSON Parameter an den Server zu senden. Es gibt meinen ganzen Code, aber ich habe ein Problem im Backslash-Charakter. Dies ist das Ergebnis der Testvariablen, das ein backSlash-Zeichen enthält. Ich sollte dieses Zeichen entfernen, da ich auf der Serverseite einen ungültigen Eingabefehler hatte und der Server den Sendeparameter nicht erkennen kann.Entfernen Sie einzelne BackSlash von String

Testvariable nach Ersetzen des Zeichens " " {\ "force \": \ "1 \", \ "from \": \ "0 \", \ "flag \": \ "1 \", \ "to": "0", "spec": {"propValueMask": "*", "itemsType": "avl_resource", "sortType": " SYS_NAME \ "\ "PropType \": \ "avl_resource \", \ "propName \": \ "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 viele Links lesen, wurden in allen Themen ersetzen vorgeschlagen " \“, aber das funktioniert nicht. Jemand hat einige Vorschläge dieses Problem Dank zu lösen.

+2

Die Schrägstriche virtuell sind. Sie müssen doppelte Anführungszeichen in einer literalen Zeichenfolge anzeigen. Sie werden ** nicht ** an den Server gesendet. – vadian

+2

... und es ist Unsinn, * die Zeichenfolge * schön zu drucken und später die Leerzeichen und Zeilentrennzeichen zu entfernen. Der Server kümmert sich überhaupt nicht um Ästhetik. Löschen Sie die Option. – vadian

Antwort

1

Wie Vadian hat vorgeschlagen, die Zeichenfolge backsla Sie sind virtuell und werden nicht zum Server gesendet.

Wenn Sie die Json für das Debuggen ausdrucken möchten, empfehle ich diesen Ansatz:

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

Achten Sie darauf, dies in Ihrem do-catch-Block gewickelt ist.

Wenn Sie die json als String möchten, können Sie tun:

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

Ja, und trotzdem sollte OP die JSON * Daten * in Objekte konvertieren, ohne die String-Darstellung zu benutzen, außer für das Debugging. Dies ist ein häufiger Fehler. Die JSON-Zeichenfolge wird für die Konvertierung nicht benötigt. – Moritz

Verwandte Themen