iOS 结构体json解析

2021-08-17  本文已影响0人  秋叶红90

1 直接上代码

struct Student:JSONCodable {
    var name:String
    var sex:Int = 0
    
}

protocol JSONCodable:Codable {
    
}

extension JSONCodable{
    func toJSONData() -> Data? {
        return self.toData()
    }
    private func toData() -> Data? {
        let encoder = JSONEncoder.init()
        let data = try? encoder.encode(self)
        return data
    }
    func toJSON() -> Any? {
        if let data = self.toData() {
            let dict = try? JSONSerialization.jsonObject(with: data, options: JSONSerialization.ReadingOptions.mutableContainers)
            
            return dict
        }
        
        return nil
        
    }
    func toJSONString() -> String? {
        if let data = self.toData() {
            
            let str = String.init(data: data, encoding: String.Encoding.utf8)
            
            return str
        }
        return nil
        
    }
    static func decode(data:Data)->Self?  {
        
        let decoder = JSONDecoder.init()
        let tempM = try? decoder.decode(Self.self, from: data)
        return tempM
        
    }
    
    static func decode(jsonDict:Any)->Self?  {
        
        if let  data2 :Data = try? JSONSerialization.data(withJSONObject: jsonDict, options: []) {
            let tempM = self.decode(data: data2)
            return tempM
        }
        
        return nil
        
    }
    static func decode(json:String)->Self?  {
        
        if let data = json.data(using: String.Encoding.utf8, allowLossyConversion: false) {
            let tempM = self.decode(data: data)
            return tempM
        }
        
        
        return nil
        
    }
}

2 使用


let model = Student.init(name: "小明", sex: 1)
        
//        转换字典
        let dict = model.toJSON()
//        解析字典
        let model1 = Student.decode(jsonDict: dict!)
//        转换json字符串
        let str = model.toJSONString()
//        解析json字符串
        let model2 = Student.decode(json: str!)

//转换data
        let jsonD = model.toJSONData()
//        解析data
        let model3 = Student.decode(data: jsonD!)
        
        print("dict \(dict) str\(str) jsonD \(jsonD) model1 \(model1) model2\(model2) model3\(model3)")

上一篇 下一篇

猜你喜欢

热点阅读