天天看點

iOS SwiftyJSON 對應的JSON 轉化為 對象

正文

SwiftyJSON

确實很好用 不會因為取了某個空對象的值而導緻程式的崩潰

但是 一直這樣

data["a"]["b"]["c"].stringValue

的形式也不太好

那怎樣把JSON轉換成對象呢

假如

JSON

的資料是這樣子的 怎樣轉成對象呢

{
    "success":"true",
    "msg":"擷取使用者資訊成功",
    "obj":{
        "userName":"張劍",
        "userAlias":"劍行者",
        "invitationCode":100
    }
}           

複制

協定

我們可以定義一個協定 讓對象實作它

import Foundation
import SwiftyJSON

public protocol ZJSwiftyJSONAble {
    init?(jsonData:JSON)
}           

複制

對象轉換

然後在定義兩個對象

Result對象
import Foundation
import SwiftyJSON

class ZJResult_S<T: ZJSwiftyJSONAble>: ZJSwiftyJSONAble {
    var success: String!
    var msg: String!
    var obj: T?
    
    
    required init?(jsonData:JSON){
        self.success = jsonData["success"].stringValue
        self.msg = jsonData["msg"].stringValue
        self.obj = T(jsonData: jsonData["obj"])
    }
}           

複制

User對象
import Foundation
import SwiftyJSON

class ZJUser_S: ZJSwiftyJSONAble {
    var userName: String!
    var userAlias: String!
    var invitationCode: Int!
      
    required init?(jsonData:JSON){
        self.userName = jsonData["userName"].stringValue
        self.userAlias = jsonData["userAlias"].stringValue
        self.invitationCode = jsonData["userAlias"].intValue
    }
}           

複制

這樣假如我們得到的

SwiftyJSON

JSON

swiftyJSON

我們就可以這樣轉

let result = ZJResult_S<ZJUser_S>(jsonData: swiftyJSON);           

複制

對象數組轉換

那如果我們得到的資料是數組呢 該怎樣設定對象呢

JSON

的資料是這樣子的

{
    "success":"true",
    "msg":"擷取使用者資訊成功",
    "obj":[{
        "userName":"張劍",
        "userAlias":"劍行者",
        "invitationCode":100
    },{
        "userName":"李四",
        "userAlias":"尼古拉斯趙四",
        "invitationCode":101
    }]
}           

複制

這樣的話 我們隻需把

Result

對象改成這樣就行了

Result對象
import Foundation
import SwiftyJSON

class ZJResult_S<T: ZJSwiftyJSONAble>: ZJSwiftyJSONAble {
    var success: String!
    var msg: String!
    var obj: [T]!
    
    required init?(jsonData:JSON){
        self.success = jsonData["success"].stringValue
        self.msg = jsonData["msg"].stringValue
        self.obj = jsonData["obj"].arrayValue.flatMap { T(jsonData: $0) }
    }
}           

複制

是不是很簡單

也就是 假如

swiftyJSON

User

的數組

let users = swiftyJSON.arrayValue.flatMap { ZJUser_S(jsonData: $0) }           

複制