iOS開發(fā) - HandyJSON的使用

HandyJSON用于Swift中JSON/Model相互轉化,支持純Swift語言

一、用法

創(chuàng)建遵守HandyJSON協(xié)議的Model類

class MenuItemModel:HandyJSON {
    
    var title:String?
    var aliasTitle:String?
    var subTitle:String?
    var isSelected:Bool?
    var markImg:Any?
    var actionDest:Any?
    var itemCode:String?
    var itemId:String?
    
    required init() {}
}

二、使用封裝

為了調用方便封裝了6個轉換方法

//
//  JsonTool.swift
//  Comic
//
//  Created by 李 on 2023/9/14.
//

import UIKit
import HandyJSON

class JsonTool: NSObject {
    
    /**
     *  Json轉對象
     */
    static  func jsonToModel(_ jsonStr:String, _ modelType:HandyJSON.Type) -> HandyJSON? {
        
        if jsonStr == "" || jsonStr.count == 0 {
#if DEBUG
            print("jsonToModel:字符串為空")
#endif
            return nil
        }
        
        return modelType.deserialize(from: jsonStr)
    }
    
    
    /**
     * Json轉數組對象
     *
     @param jsonArray  array格式的 json 字符串 / JSON 數組
     */
    static func jsonArrayToModel(_ jsonArray:Any?, _ modelType:HandyJSON.Type) -> [HandyJSON?]? {
        
        if jsonArray == nil {
#if DEBUG
            print("jsonArrayToModel:jsonArray字符串為空")
#endif
            return nil
        }
        
        
        var resultJsonArray:[[String:Any?]]?
        if jsonArray is String {//array格式的 json 字符串
            
            let jsonArrayStr = jsonArray as! String
            let data = jsonArrayStr.data(using: String.Encoding.utf8)
            resultJsonArray = try! JSONSerialization.jsonObject(with:data!, options: JSONSerialization.ReadingOptions()) as? [[String:Any?]]
            
        }else if jsonArray is [[String:Any?]] {//JSON 數組
            resultJsonArray = jsonArray as? [[String:Any?]]
        }
        
        var modelArray:[HandyJSON?]? = []
        
        if let resultJsonArray = resultJsonArray {
            for itemDic:[String:Any?] in resultJsonArray {
                modelArray?.append(modelType.deserialize(from: itemDic as [String : Any]))
            }
        }
        
        return modelArray
        
    }
    
    
    /**
     *  字典轉對象
     */
    static func dictionaryToModel(_ dictionStr:[String:Any],_ modelType:HandyJSON.Type) -> HandyJSON? {
        if dictionStr.count == 0 {
#if DEBUG
            print("dictionaryToModel:字符串為空")
#endif
            return nil
        }
        return modelType.deserialize(from: dictionStr)
    }
    
    
    /**
     *  對象轉JSON
     */
    static func modelToJson(_ model:HandyJSON?) -> String? {
        if model == nil {
#if DEBUG
            print("modelToJson:model為空")
#endif
            return nil
        }
        return (model?.toJSONString())
    }
    
    /**
     *  對象數組 轉 json數組
     */
    static func modelArrayToJsonArray(_ modelArray:[HandyJSON]?) -> [[String:Any?]]? {
        if modelArray == nil {
#if DEBUG
            print("modelArrayToJsonArray:modelArray為空")
#endif
            return nil
        }
        
        var resultJsonArray:[[String:Any]] = []
        
        if let modelArray {
            for itemDic in modelArray {
                let itemJson = itemDic.toJSON()
                if let itemJson {
                    resultJsonArray.append(itemJson)
                }
            }
        }
        return resultJsonArray
    }
    
    
    /**
     *  對象轉字典
     */
    static func modelToDictionary(_ model:HandyJSON?) -> [String:Any?] {
        if model == nil {
#if DEBUG
            print("modelToDictionary:model為空")
#endif
            return [:]
        }
        return (model?.toJSON())!
    }
    
}

三、調用

用法相對清晰,直接調用就可以了

 let testResult = JsonTool.modelArrayToJsonArray(testModelArr)
 print("轉換JSON結果:\(String(describing: testResult))")
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容