如何使用 SwiftyJSON 和 Alamofire 解析 JSON 字典

How to parse JSON dictionary using SwiftyJSON and Alamofire

我的 alamofire.request 有问题。我尝试使用 SwiftyJSON 来解码 JSON 对 Struct 的响应。 .但我的模型数据越来越零。

这是我的 API 回复

 {
 "userDetails" : 
  { "id":2,
    "roleID":1,
    "successFlag":1
  },
  "settingID" : "20"
 }

型号class

import Foundation
import SwiftyJSON


struct User {
    var settingID : String?
    var userdetails : UserDetails?

      init(json : JSON?) {

         self.settingID = json?["settingID"].string
         if let value = json?["userDetails"].dictionaryObject {

            let new = UserDetails(json: JSON(value))
             self.userdetails = new
          }
        }

       }

   struct UserDetails  {

      var id : Int?
      var roleID : Int?
      var successFlag : Int?

        init(json : JSON?) {

             self.id = json?["id"].int
             self.roleID = json?["roleID"].int
             self.successFlag = json?["successFlag"].int

        }

      }

我使用 Alamofire 和 Swifty 获取数据的代码JSON

    import Alamofire
    import SwiftyJSON


     var userData : [User] = []

     func fetchData() {

     Alamofire.request(base_url + APIManager.loginApi, method: .post, parameters:      params, encoding: URLEncoding.queryString, headers: nil).responseJSON { (resp) in

            switch resp.result {

            case .success :
                print(resp.result)

                do {

                    let myResult = try JSON(data: resp.data!)
                    print(myResult)

                    myResult.dictionaryValue.forEach({(user) in

                        let newUser = User(json: JSON(user))
                        self.userData.append(newUser)

                        print(self.userData)
                    })


                }catch {
                    print(error)
                }

                break

            case .failure :
                break
            }
        }

      }

但是如果我打印 self.userData ,得到的响应是空的。 你知道为什么我不能用我的 JSON 数据解码我的结构吗?

非常感谢您的帮助

请尝试使用 Codable。创建 Codable 模型更容易,Apple 推荐。

struct Root: Decodable {
    let userDetails: User
    let settingID: String

}

struct User: Decodable {
    let id: Int
    let roleID: Int
    let successFlag: Int
}

解析 data 喜欢,

do {
    let response = try JSONDecoder().decode(Root.self, from: data)
    print(response)
} catch {
    print(error)
}

像下面这样更改您的响应代码

switch response.result {
case .success(let value):
    let response = JSON(value)
    print("Response JSON: \(response)")

    let newUser = User(json: response)
    self.userData.append(newUser)
    print(self.userData)

case .failure(let error):
    print(error)
    break
}