美文网首页
iOS 结构体json解析

iOS 结构体json解析

作者: 秋叶红90 | 来源:发表于2021-08-17 14:05 被阅读0次

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)")

相关文章

网友评论

      本文标题:iOS 结构体json解析

      本文链接:https://www.haomeiwen.com/subject/fdnbbltx.html