(有效负载无效 JSON)尝试打印到 swift 中的空闲空间

(Payload was not valid JSON) trying to print to slack room in 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)
    }

所以当我运行这段代码时,我不会出错。但是当我打印结果时,它说 "Payload was not valid JSON"

嗯,这是因为您的 JSON 无效,如错误消息所述。

在JSON字符串中,键必须在双引号内;字典用 {} 分隔,数组用 [] 分隔。另外,使用 :,而不是 =

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

您可以通过使用它创建一个对象来检查您的 JSON 字符串是否有效:

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)
    }
}

打印的是 JSON 内容的对象表示(当然语法看起来不同,不要将其与 JSON 语法或 Swift 语法混淆):

["payload": { channel = "#bottest"; username = garrettogrady; }]

那么您确定您的 JSON 字符串 可以发送,因为您可以用它制作一个对象。

Slack 期望在 JSON 上使用双引号。您得到的结果是 Slack 拒绝了您目前形成的 JSON。

这是我自己的代码,它可以让您合并各个字段的变量值,我认为这是您的下一步。

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

编辑:这个问题启发了我创建一个对象来实现 Slack webhook API。这是给任何感兴趣的人的:https://github.com/pfj3/SwiftSlackbots