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