我正在创建一个使用API的应用程序,例如,我们只想说一下Twitter API,因为它是大多数人都熟悉的,并且对于这个使用哪个API确实很重要以及JSON结果的来源。
因此,使用无安全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以及如何使其与我的应用程序一起使用。
所以我的问题在于我想使用像Twitters这样的oAuth API。如果我只发送未经身份验证的请求,我会得到预期的结果:
{"errors":[{"code":215,"message":"Bad Authentication data."}]}
现在我预计发生的事情就是当我更改原始代码并将链接给我错误时,我可以指定let userName:JSON = json["errors"][0]
来选择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)
我非常关心这个不起作用的原因更多的是理解为什么它不是因为我知道我何时在实际情况下玩这个 - 显然从twitter API中获取错误信息可能不会&#39有很大的实际应用。
最后,我只想说,当我通过浏览器发送经过身份验证的请求时,文件会被下载,而不会像我一直使用的其他JSON文件一样显示在浏览器上。这在将它应用于应用程序时是否有所不同,或者它是否完全相同,我只需要像使用任何其他JSON格式一样使用它?
我知道这是一个很长的问题,但我想我已经包含了所有相关信息。
请耐心等待我 - 我只是在学习,谢谢。
答案 0 :(得分:0)
替换
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!)
为你的第二个例子。