(La carga útil no era JSON válida) tratando de imprimir a una habitación holgada en swift

let str = "payload={'channel': '#bottest', 'username': 'garrettogrady', 'text': 'This post is coming from swift.'}" let strData = (str as NSString).dataUsingEncoding(NSUTF8StringEncoding) let cachePolicy = NSURLRequestCachePolicy.ReloadIgnoringLocalCacheData let url = NSURL(string: "web hook url (leaving it out for privacy reasons") var request = NSMutableURLRequest(URL: url!, cachePolicy: cachePolicy, timeoutInterval: 2.0) request.HTTPMethod = "POST" request.HTTPBody = strData println("printing to slack") var error : NSError? = nil if let data = NSURLConnection.sendSynchronousRequest(request, returningResponse: nil, error: &error) { let results = NSString(data:data, encoding:NSUTF8StringEncoding) println(results) } else { println("data invalid") println(error) } 

Entonces, cuando ejecuto este código, no me equivoco. Pero cuando imprimo resultados, dice "La carga no era JSON válida"

Slack espera comillas dobles en JSON. El resultado que obtienes es de Slack rechazando tu JSON tal como está formado actualmente.

Aquí está el código de mis propias cosas, que le permite incorporar valores de variable para los distintos campos, que de todos modos creo que es su próximo paso.

 let channel = "#bottest" let username = "garrettogrady" let text = "This post is coming from swift." let payload = "payload={\"channel\": \"\(channel)\", \"username\": \"\(username!)\", \"text\": \"\(text)\""}" 

EDITAR: Esta pregunta me inspiró a crear un object para implementar la API Slack webhook. Aquí está para cualquier persona interesada: https://github.com/pfj3/SwiftSlackbots

Bueno, esto se debe a que su JSON no es válido, como lo indica el post de error.

En la cadena JSON , las keys deben estar dentro de comillas dobles; Los dictionarys están delimitados con {} y las matrices con [] . Además, usa : no = .

 let str = "{\"payload\":{\"channel\": \"#bottest\", \"username\": \"garrettogrady\"}}" 

Puede verificar si su cadena JSON es válida creando un object con ella:

 if let strData = (str as NSString).dataUsingEncoding(NSUTF8StringEncoding) { var error: NSError? if let json = NSJSONSerialization.JSONObjectWithData(strData, options: NSJSONReadingOptions.allZeros, error: &error) as? [String:AnyObject] { println(json) } } 

Lo que está impreso es la representación de objects del contenido de JSON (la syntax se ve diferente, por supuesto, no la mezcle con la syntax de JSON o la syntax de Swift):

["carga útil": {canal = "#bottest"; username = garrettogrady; }]

Entonces está seguro de que su cadena JSON está bien para ser enviada, porque pudo hacer un object con él.