iOS开发 - HandyJSON的使用

HandyJSON用于Swift中JSON/Model相互转化,支持纯Swift语言

一、用法

创建遵守HandyJSON协议的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))")
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容