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