美文网首页iOS技术Swift 我的Swift开发
Swift数据解析之KaKaJson的基本用法

Swift数据解析之KaKaJson的基本用法

作者: 9岁就很6 | 来源:发表于2022-03-04 10:51 被阅读0次

继MJExtion之后的KaKaJson是swift语言中的数据解析库,他也是传奇MJ大神的产物,下面我介绍下他的基本使用方法
pod 导入

 # 模型转换框架
  pod 'KakaJSON', '1.1.2'
1.首页先创建一个BaseMode

继承NSObject ,再遵循KakaJson的代理Convertible,代码如下

import UIKit
import KakaJSON

protocol Copyable: Codable {
    func clone() -> Self
}

extension Copyable {
    
    func clone() -> Self {
        let encoder = JSONEncoder()
        guard let data = try? encoder.encode(self) else {
            fatalError("encode失败")
        }
        let decoder = JSONDecoder()
        guard let target = try? decoder.decode(Self.self, from: data) else {
           fatalError("decode失败")
        }
        return target
    }
    
}


class BaseModel: NSObject,Convertible {

    func kj_modelKey(from property: Property) -> ModelPropertyKey {
        return property.name
    }

    required override init(){}
    
}

2. 创建一个CostomModel 继承 BaseMode

import UIKit
import KakaJSON

class CostomModel: BaseModel {
     
     
    var nickname = ""
    var age : Int = 0
    var sex = ""
    var userDict : [String:Any] = [:]
    var userModel : UserModel?
    
    
    //映射属性 userModel 为模型属性, user_Model 为后台json给的字段
    override func kj_modelKey(from property: Property) -> ModelPropertyKey {
        switch property.name{
        case "userModel": return "user_Model"
        default:return property.name
            
            /*
             驼峰 -> 下划线
             // 由于开发中可能经常遇到`驼峰`映射`下划线`的需求,KakaJSON已经内置了处理方法
                    // 直接调用字符串的underlineCased方法就可以从`驼峰`转为`下划线`
                    // `nickName` -> `nick_name`
                    return property.name.kj.underlineCased()
             */
            
            
            /*
             下划线 -> 驼峰
             // `nick_name` -> `nickName`
                    return property.name.kj.camelCased()
             */
            
        }
    }
}



class UserModel:BaseModel{
    
    var userName = ""
    var userAge : Int = 0
    var userSex = ""
    
}



class ArrayModel:BaseModel{
    
    var name:String = ""
    var price:String = ""
    
    
}



3.转为nsobjcet模型对象kj.model , 转为数组模型对象kj.modelArray
   let jsonDict:[String:Any] = [
            "nickname":"黄世文",
            "sex":"男",
            "age":"27",
            "user_Model":[
                "userName":"黄世文",
                "userSex":"男",
                "userAge":"27",
            ]
        ]
        
        
        
        let ArrayDict : [[String:Any]] = [
            ["name":"A","price":"100"],
            ["name":"B","price":"200"],
            ["name":"C","price":"300"],
        ]
        
        let model = jsonDict.kj.model(CostomModel.self)
        let arrays = ArrayDict.kj.modelArray(ArrayModel.self)

4.转为json对象kj.JSONObject() 转为json字符串kj.JSONString()
  for model:ArrayModel in arrays{
            print(model.price)
            
            //将model转为字典
            let dict = model.kj.JSONObject()
            
            let dictString = model.kj.JSONString()
            
            print("json字典\(dict)+json字符串\(dictString)")
            
            
        }
        
5.继承使用Convertible方法直接调用方法
// 如果你想把JSON数据转换到原本已经创建好的模型实例上,可以使用convert方法

struct Cat: Convertible {
    var name: String = ""
    var weight: Double = 0.0
}

let json: [String: Any] = [
    "name": "Miaomiao",
    "weight": 6.66
]

var cat = Cat()
// .kj_m是.kj的mutable版本,牵扯到修改实例本身都是.kj_m开头
cat.kj_m.convert(from: json)
print("name: \(cat.name)   weight\(cat.weight)")
// name: Miaomiao   weight6.66

相关文章

网友评论

    本文标题:Swift数据解析之KaKaJson的基本用法

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