oAuth 使用 SwiftyJSON 读取结果?
oAuth using SwiftyJSON to read the results?
我正在创建一个使用 API 的应用程序,为了举例,我们只说 Twitter API,因为它是大多数人都熟悉的,但它并不使用哪个 API 以及 JSON 结果来自哪里真的很重要。
所以使用 none 安全 API,我可以 运行 以下代码:
let urlPath = "http://mySimpleApi.com/results.js"
let url: NSURL = NSURL(string: urlPath)!
let session = NSURLSession.sharedSession()
let task = session.dataTaskWithURL(url, completionHandler: {data, response, error -> Void in
if error != nil {
// If there is an error in the web request, print it to the console
println(error.localizedDescription)
}
var err: NSError?
var jsonResult = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers, error: &err) as NSDictionary
if err != nil {
// If there is an error parsing JSON, print it to the console
println("JSON Error \(err!.localizedDescription)")
}
let json = JSON(jsonResult)
let userName:JSON = json["user"]["name"]
let userNameString = userName.string!
println(userNameString)
})
task.resume()
结果以JSON格式返回,上面的程序代码成功打印出结果用户名。也许我应该快速向您展示 JSON 的格式,这样您就知道您在看什么。
{
"user" :
{
"name": "Bob",
"login": "bob2006",
"password": "bobsEncryptedPassword",
}
}
所以当下面的代码是运行时,我在控制台中返回了名字"Bob";正是我所期望的。
很明显这很简单,我这样做只是为了探索和试验 JSON 以及使其与我的应用程序一起工作的方法。
所以我的问题是当我想像 Twitter 那样使用 oAuth API 时。如果我只是发送未经身份验证的请求,我会得到预期的结果:
{"errors":[{"code":215,"message":"Bad Authentication data."}]}
现在我期望发生的事情是当我更改我的原始代码并放置 link 时,给我这个错误的是我可以将 let userName:JSON = json["errors"][0]
指定为 select 第一个项目在 errors
区域。我只是假设这是一个数组,因为它使用方括号打开。当这不起作用时,我尝试了 let userName:JSON = json["errors"][0][message]
但这不起作用,我得到了同样的错误。该错误突出显示代码并说:
Thread 3: EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP,subcode=0x0)
然后在控制台中返回:
fatal error: unexpectedly found nil while unwrapping an Optional value
(lldb)
我如此关心这个不起作用的原因更多是为了理解为什么它不起作用所以我知道我什么时候在实际情况下玩这个 - 显然是从推特上得到错误信息 API可能没有很大的实际应用。
最后,我只想说,当我通过浏览器发送经过身份验证的请求时,文件会被下载,但不会像我一直使用的其他 JSON 文件那样显示在浏览器上。这在将它应用于应用程序时是否有所不同,或者它的工作方式是否完全相同,我只需要像使用任何其他 JSON 格式一样使用它?
我知道这是一个很长的问题,但我想我已经包含了所有相关信息。
请耐心等待-我正在学习,谢谢。
替换
let userName: JSON = json["user"]["name"]
let userNameString = userName.string!
println(userNameString)
和
let dic = json["errors"][0]
let code = dic["code"].int
println(code!)
let msg = dic["message"].string
println(msg!)
你的第二个例子。
我正在创建一个使用 API 的应用程序,为了举例,我们只说 Twitter API,因为它是大多数人都熟悉的,但它并不使用哪个 API 以及 JSON 结果来自哪里真的很重要。
所以使用 none 安全 API,我可以 运行 以下代码:
let urlPath = "http://mySimpleApi.com/results.js"
let url: NSURL = NSURL(string: urlPath)!
let session = NSURLSession.sharedSession()
let task = session.dataTaskWithURL(url, completionHandler: {data, response, error -> Void in
if error != nil {
// If there is an error in the web request, print it to the console
println(error.localizedDescription)
}
var err: NSError?
var jsonResult = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers, error: &err) as NSDictionary
if err != nil {
// If there is an error parsing JSON, print it to the console
println("JSON Error \(err!.localizedDescription)")
}
let json = JSON(jsonResult)
let userName:JSON = json["user"]["name"]
let userNameString = userName.string!
println(userNameString)
})
task.resume()
结果以JSON格式返回,上面的程序代码成功打印出结果用户名。也许我应该快速向您展示 JSON 的格式,这样您就知道您在看什么。
{
"user" :
{
"name": "Bob",
"login": "bob2006",
"password": "bobsEncryptedPassword",
}
}
所以当下面的代码是运行时,我在控制台中返回了名字"Bob";正是我所期望的。
很明显这很简单,我这样做只是为了探索和试验 JSON 以及使其与我的应用程序一起工作的方法。
所以我的问题是当我想像 Twitter 那样使用 oAuth API 时。如果我只是发送未经身份验证的请求,我会得到预期的结果:
{"errors":[{"code":215,"message":"Bad Authentication data."}]}
现在我期望发生的事情是当我更改我的原始代码并放置 link 时,给我这个错误的是我可以将 let userName:JSON = json["errors"][0]
指定为 select 第一个项目在 errors
区域。我只是假设这是一个数组,因为它使用方括号打开。当这不起作用时,我尝试了 let userName:JSON = json["errors"][0][message]
但这不起作用,我得到了同样的错误。该错误突出显示代码并说:
Thread 3: EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP,subcode=0x0)
然后在控制台中返回:
fatal error: unexpectedly found nil while unwrapping an Optional value
(lldb)
我如此关心这个不起作用的原因更多是为了理解为什么它不起作用所以我知道我什么时候在实际情况下玩这个 - 显然是从推特上得到错误信息 API可能没有很大的实际应用。
最后,我只想说,当我通过浏览器发送经过身份验证的请求时,文件会被下载,但不会像我一直使用的其他 JSON 文件那样显示在浏览器上。这在将它应用于应用程序时是否有所不同,或者它的工作方式是否完全相同,我只需要像使用任何其他 JSON 格式一样使用它?
我知道这是一个很长的问题,但我想我已经包含了所有相关信息。
请耐心等待-我正在学习,谢谢。
替换
let userName: JSON = json["user"]["name"]
let userNameString = userName.string!
println(userNameString)
和
let dic = json["errors"][0]
let code = dic["code"].int
println(code!)
let msg = dic["message"].string
println(msg!)
你的第二个例子。