如何在 Swift 中解析 JSON 数组?

Posted

技术标签:

【中文标题】如何在 Swift 中解析 JSON 数组?【英文标题】:How to parse a array of JSON in Swift? 【发布时间】:2016-04-29 06:44:15 【问题描述】:

我是 Swift 的初学者。我正在尝试在 Swift 中发出 http 请求。

我成功了,但我无法解析响应。我对此进行了很多搜索,但找不到任何东西。

这是我的一段代码。

以上代码的输出为:



  Login =     

        AccountType = Pro;
        FileSizeLimit = 157286400;
        PasswordHash = fc27a61bc3dda36ebe28887d4da16df2093bbbcd8d58cfc87b2b48b70801c411;

        Session =         
            id = ca77dd997db2169908a1a84204c99ae7;
        ;

        SmugVault = 0;

        User =         
            DisplayName = "smug";
            NickName = better1;
            id = 2455641;
        ;

    ;
    method = "smugmug.login.withPassword";
    stat = ok;


我想获取显示名称。我能够提取 sessionId 但不能提取名称。请帮我解决这个问题。

下面是代码

func postDataToURL()

    let userName = self.userName.text;
    let userPassword = self.password.text;

    let postUrl = NSURL(string: "http://api.smugmug.com/hack/json/1.2.0/?method=smugmug.login.withPassword")!

    let smugUrlRequest = NSMutableURLRequest(URL: postUrl)

    smugUrlRequest.HTTPMethod = "POST"

    let postString = "&EmailAddress=" + userName! + "&Password=" + userPassword! + "&APIKey=1WcKTxQH2fegQTF0C7cVAORjeoTSD68V"

    smugUrlRequest.HTTPBody = postString.dataUsingEncoding(NSUTF8StringEncoding)

    let task = NSURLSession.sharedSession().dataTaskWithRequest(smugUrlRequest) 
        data, response, error in

        if error != nil 
            print("error=\(error)")
            print("ERROR")
        

        if let httpStatus = response as? NSHTTPURLResponse where httpStatus.statusCode != 200            // check for http errors
            print("statusCode should be 200, but is \(httpStatus.statusCode)")
            print("response = \(response)")
        

        let responseString = NSString(data: data!, encoding: NSUTF8StringEncoding)
        print("responseString = \(responseString)")

        do 
            if let json = try NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.MutableContainers) as? NSDictionary 
                if let stat = json["method"] as? String 
                    print(stat) // London
                

                print(json)

                let user = json["Login"]!
                let FileSizeLimit = user["FileSizeLimit"]
                print(FileSizeLimit)

                let PasswordHash = user["PasswordHash"]
                print(PasswordHash)

                let Session = user["Session"]
                print(Session)

                let DisplayName = user["User"]
                print(DisplayName)


            
         catch let error as NSError
            print("\(error)")
        


    
    task.resume()

【问题讨论】:

How do I parse an array inside parsed JSON in Swift?的可能重复 显示你的代码是如何获得 sessionId 的。获取 DisplayName 应该非常相似 How to convert a JSON string to a dictionary?的可能重复 我已经添加了代码。 在 JSON 中的任何地方都看不到数组。 【参考方案1】:

问题已解决。解决办法是

   let jsonData = try NSData(contentsOfFile: path, options: NSDataReadingOptions.DataReadingMappedIfSafe)
            do 
                let jsonResult: NSDictionary = try NSJSONSerialization.JSONObjectWithData(jsonData, options: NSJSONReadingOptions.MutableContainers) as! NSDictionary
                print("jsonResult : ",jsonResult)
                print("Session : ",jsonResult.valueForKey("Login")?.valueForKey("Session"))
                print("DisplayName : ",(jsonResult.valueForKey("Login")?.valueForKey("User")?.valueForKey("DisplayName"))!)

             catch 

【讨论】:

以上是关于如何在 Swift 中解析 JSON 数组?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 SwiftyJSON 在 Swift 中解析这个 JSON 对象?

如何在 Swift 3 中使用 Alamofire 4 解析这个 json?

如何在 Swift 5 中使用 Alamofire 解析 json

如何将 alamofire 返回 json 解析为 Swift 中的字符串数组?

如何在 Swift 中解析来自 Alamofire API 的 JSON 响应?

Swift:如何在 TableView 内的 CollectionView 中显示解析的 JSON 数据?