Как разобрать словарь JSON, используя Swifty JSON и Alamofire - PullRequest
0 голосов
/ 20 января 2020

У меня проблема с моим alamofire.request. Я попытался расшифровать ответ JSON в Struct, используя Swifty JSON. , Но мои данные модели становятся нулевыми.

вот мой ответ API

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

Класс модели

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 данных?.

Большое спасибо за вашу помощь

Ответы [ 2 ]

2 голосов
/ 20 января 2020

Попробуйте использовать 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)
}
1 голос
/ 20 января 2020

Измените код ответа, как показано ниже

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
}
...