【问题标题】:Get value out from JSON in Swift xcode 6在 Swift xcode 6 中从 JSON 中获取价值
【发布时间】:2015-08-07 08:28:45
【问题描述】:

我有一个 JSON 文件,我将其转换为 NSDictionary 对象。我的问题是如何从这个对象中获取一个值?我在我的网站上创建了一个 httppost,然后我得到一个 JSON 数组,其中包含值“success”、“userId”和“token 我想检查“token”中的“access_token”字符串

public class HttpPost{

var URLstring : String = "http://95.85.53.176/nhi/api/app/login"
var ClientSecret : String = "SqzssXGU0C5ukzgvivVTeg7QdlZcnBUKULECgkFp"

public func HttpPostToLogin(Email: String, Password: String, completionHandler: (responseSuccess: Int32) -> ())
{

    var postString = "email=" + Email + "&password=" + Password + "&client_secret=" + ClientSecret

    //Declare URL
    var url: NSURL! = NSURL(string: URLstring)
    var request: NSMutableURLRequest = NSMutableURLRequest(URL: url)

    //Declare which HTTPMethod
    request.HTTPMethod = "POST"

    //POST data
    request.HTTPBody = postString.dataUsingEncoding(NSUTF8StringEncoding)

    //new thread for receiving data
    let task = NSURLSession.sharedSession().dataTaskWithRequest(request){
        data, response, error in

        if error != nil
        {
            println("error=\(error)")
            return
        }

        //Check if there is response from server
        println("response =\(response)")

        var responseString = NSString(data: data, encoding: NSUTF8StringEncoding)


        println("responseString =\(responseString)")


        var error: NSError?

        //parse JSON file
        var myJSON : NSDictionary = NSJSONSerialization.JSONObjectWithData(data, options: .MutableLeaves, error: &error) as! NSDictionary

        println(myJSON)

        //this works
        var success = myJSON["success"]!.intValue

        //Tried - gives me an error
        //var accessToken = myJSON["token"]["access_token"]!.stringValue

        //println(accessToken)

        //complete task and return success value
        completionHandler(responseSuccess: success!)



    }


    task.resume()

}
}

输出:

{
success = 1;
token =     {
    "access_token" = p9f9ge3Fe1dn5T7xpfBZHfZaA7CwYe9fbLNgeqOY;
    "expires_in" = 604800;
    "refresh_token" = w0qltq4SDax5KtIKEEFZm76CsB9BfozsuSrGuRcI;
    "token_type" = Bearer;
};
userId = 61;
}

【问题讨论】:

    标签: json swift xcode6 nsurlsession


    【解决方案1】:

    尝试将值转换为String

    var tokenDict: NSDictionary = myJSON["token"] as! NSDictionary
    var accessToken: String = tokenDict["access_token"] as! String
    

    对于用户 ID:

    var myUserID: Int = myJSON["userId"] as! Int
    

    【讨论】:

    • var accessToken = myJSON["userId"]!.stringValue 当我打印出来它给我“nil”??? - 它与“成功”的完全一样
    • @LocDaiLe 我希望,现在你可以得到剩下的东西了。如果没有,请告诉我:)
    • 我不明白 tokendict 声明? @Sohil R. Memon
    • 这是最佳实践!为了从另一个字典中获取字典,你应该转换为NSDictionary。否则,它将自动转换为AnyObject。并且请检查您的 jsonData 在获得响应时是否不为零,否则您将在那里崩溃。 @LocDaiLe
    • 我如何检查令牌是否不为零?我尝试实现下面的代码,但它从未进入 if 范围 - 尽管令牌不为零。
    【解决方案2】:

    在访问它的值之前,你应该检查 token 是否为 nil。否则应用程序将崩溃。当 token 不是 nil 并且 myJSON["token"] 是 NSDictionary 类型时,将执行以下代码。

    if let tokenDict = myJSON["token"] as? NSDictionary {
        var accessToken : String? = tokenDict["access_token"] as? String
        var expires_in  : Int? = tokenDict["expires_in"] as? Int
    }
    

    【讨论】:

    • 是的,我遇到了这个问题 - 我使用了你的代码,但是我在 if 范围内调用 println,它没有打印出任何东西??? "@Bhupendra Singh
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-11
    • 2016-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-09
    相关资源
    最近更新 更多