3

How can make model class for this json data

{
    total: 41,
    totalPages: 4,
    valueData: [
    {
    id: "23",
    lastLogin: "0-Jul-2011 11:27:36 AM",
    name: "varii"
    },
    {
    id: "24",
    lastLogin: "0-Jul-2015 11:27:36 AM",
    name: "sarii"
    },
    {
    id: "25",
    lastLogin: "0-Jul-2018 11:27:36 AM",
    name: "narii"
    } ]

}


class OnResponse {

    var total: Int?
    var totalPages: Int?

    init(response: [String: Any]) {
        self.total = response["total"]
        self.totalPages = response["totalPages"]
    }
}

It's not working how can make it ready for work and how to pass values to controller to model and how to get value from model

Anh Pham
  • 2,108
  • 9
  • 18
  • 29
LeNI
  • 1,184
  • 2
  • 10
  • 19

6 Answers6

1

Follow the below class structure

class Response {
    var total: Int?
    var totalPages: Int?
    var valueData: [LoginData]?

    init(response: [String: Any]) {
       self.total = response["total"]
       self.totalPages = response["totalPages"]
       var items:[LoginData] = ()
       for (data in response["valueData"]) {
           let login = LoginData(name: data["name"], lastLogin: data["lastLogin"])
           items.append(login)
       }
       self.valueData = items
    }
}

class LoginData {
    var name: String?
    var lastLogin: String?

    init(name: String, lastLogin: String) {
        self.name = name
        self.lastLogin = lastLogin
    }
}
Akhilrajtr
  • 5,170
  • 3
  • 19
  • 30
0

Model for Your response :

struct ModelName {

    var total: Int?
    var totalPage: Int?
    var reverseMatches: [LoginDetails]?
}

struct LoginDetails {

    var id: String?
    var lastLogin: String?
    var name: String?
}

Parse the api response and assign the values on the appropriate fields. I have made, all the variables are optional.

Assign values like below.

var obj = Model()
obj.total = response["total"] as? Int

obj should be var, because you are going to mutate the struct values. because struct is value based, not reference based

Subramanian P
  • 4,365
  • 2
  • 21
  • 25
0

you should use "reverseMatches" to retrieve the array, not the "data". May be you can use a third library to convert your json data to a model, such as Unbox, https://github.com/JohnSundell/Unbox.

Passaction
  • 389
  • 3
  • 5
0
class DataModel{
    var total : Int?
    var totalPages : Int?
    var valueData : [UserModel]?

    init(JSON: [String:Any?]){
        self = parser.doParse(JSON: JSON)
    }
}

class UserModel{
    var id : String?
    var lastLogin : String?
    var name : String?
}

class parser : NSObject{
    class func doParse(JSON: [String:Any?])->DataModel{
        let dataModel = DataModel()
        dataModel.total = JSON["total"] as? Int
        dataModel.totalPages = JSON["totalPages"] as? Int
        var userInfo : [UserModel] = []
        let valueData : [String:String?]? = JSON["valueData"] as? [String:String?]
        if let valueData = valueData{
            for dataDict : [String:String?] in valueData{
                let itemModel = UserModel()
                itemModel.id = dataDict["id"] as? String
                itemModel.lastLogin = dataDict["lastLogin"] as? String
                itemModel.name = dataDict["name"] as? String
                userInfo.append(itemModel)
            }
            dataModel.valueData = userInfo
        }
        return dataModel
    }
}
Explorer.AS
  • 161
  • 5
0

you should use struct instead of class for creating model object...

advantages of struct over class refer Why Choose Struct Over Class? class/24232845 use two struct for holding your data one is for your single total count and other is for last login detail

struct lastLogin  {

let totalCount: (total: Int, totalPages: Int)
let valueArray: [lastLoginDetail]

}


struct lastLoginDetail {

let valueData: (id: String, lastLogin: String,name: String)

}

extension lastLoginDetail {

init(json: [String : String]) throws {
    let id = json["id"]
    let lastLogin = json["lastLogin"]
    let name = json["name"]
    let value = (id,lastLogin,name)
    self.valueData = value as! (id: String, lastLogin: String, name: String)
}

}

extension lastLogin {

init(json: [String : Any]) throws {
     let total = (json["total"] as! NSNumber).intValue
     let totalPages = (json["totalPages"] as! NSNumber).intValue
     let totalCounts = (total,totalPages)
     var userInfo : [lastLoginDetail] = []
    // Extract and validate valueData
    let valueData = json["valueData"] as? NSArray
    if let valueData = valueData{
      for dataDict   in valueData{
        let dic : [String : String] = dataDict as! [String : String]
        let  lastLoginDeatails = try! lastLoginDetail(json: dic)
        userInfo.append(lastLoginDeatails)
    }
    }
    self.valueArray = userInfo
    self.totalCount = totalCounts
}

}



func HowToUseModelClass(){

let jsonDic  = NSDictionary()
// jsonDic // your json value
let  dataValue = try! lastLogin(json: (jsonDic as! [String : Any])) // parsing the data
print(dataValue.totalCount.total)
print(dataValue.totalCount.totalPages)
print(dataValue.valueArray[0].valueData.id)

 }
Dimple
  • 788
  • 1
  • 11
  • 27
0
class LoginData: NSObject {
let total: Int = 0
let totalPages: Int = 0
let valueData: Array<ValueData> = Array<ValueData>()
override init(total: Int!, totalPages: Int, valueData: Array<ValueData>!) {
self.total = total
self.totalPages = totalPages
self.valueData = valueData
}
}

struct ValueData {
let id: int?
let lastLogin: String?
let name: String?
init(id: int!, lastLogin: string, name: string!)
self.id = id ?? 0
self.lastLogin = lastLogin ?? ""
self.name = name ?? ""
}
}