(有效负载无效 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
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