SexyJson
SexyJson 是 Swift5+ fast json parse 开源库,简单直观,完美支持 class 和 struct 模型,支持 KVC 模型,完全面向协议架构,支持 iOS 和 MAC OS X
Objective-c 版本
更新:支持兼容 Swift5.+
注意
- 模型定义必须实现 SexyJson 协议
- 如果有任何枚举类型必须在模型数据类型定义中指定并实现 SexyJsonEnumType 协议
- 如果要使用 swift3.2,请 pod SexyJson '~> 0.0.4'
要求
- iOS 8.0+ / Mac OS X 10.11+ / tvOS 9.0+
- Xcode 8.0 或更高版本
- Swift 5.0
安装
- CocoaPods: pod 'SexyJson'
模型
这是一个 JSON 示例
let json = "{\"age\":25,\"enmuStr\":\"Work\",\"url\":\"https:\\/\\/www.baidu.com\",
\"subArray\":[{\"test3\":\"test3\",\"test2\":\"test2\",\"cls\":{\"age\":10,
\"name\":\"swift\"},\"test1\":\"test1\"},{\"test3\":\"test3\",\"test2\":\"test2\",
\"cls\":{\"age\":10,\"name\":\"swift\"},\"test1\":\"test1\"}],\"color\":\"0xffbbaa\",
\"nestArray\":[[{\"test\":\"test1\"},{\"test\":\"test2\"}],[{\"test\":\"test3\"},
{\"test\":\"test4\"}]],\"enmuInt\":10,\"sub\":{\"test1\":\"test1\",\"test2\":\"test2\",
\"test3\":\"test3\"},\"height\":175,\"intArray\":[1,2,3,4],\"name\":\"吴海超\",
\"learn\":[\"iOS\",\"android\",\"js\",\"nodejs\",\"python\"]}"
模型类
enum WorkEnum: String,SexyJsonEnumType {
case null = "nil"
case one = "Work"
case two = "Not Work"
}
enum IntEnum: Int,SexyJsonEnumType {
case zero = 0
case hao = 10
case xxx = 20
}
struct Model :SexyJson {
var age: Int = 0
var enmuStr: WorkEnum!
var url: URL!
var subArray: [SubArray]!
var color: UIColor!
var nestArray: [[NestArray]]?
var enmuInt: IntEnum = .xxx
var sub: Sub!
var height: Int = 0
var intArray: [Int]!
var name: String!
var learn: [String]!
/// Model mapping
public mutating func sexyMap(_ map: [String : Any]) {
age <<< map["age"]
enmuStr <<< map["enmuStr"]
url <<< map["url"]
subArray <<< map["subArray"]
color <<< map["color"]
nestArray <<< map["nestArray"]
enmuInt <<< map["enmuInt"]
sub <<< map["sub"]
height <<< map["height"]
intArray <<< map["intArray"]
name <<< map["name"]
learn <<< map["learn"]
}
}
您不需要手动创建 SexyJson 模型类,可以通过 WHC_DataModel.app 使用开源工具自动创建 SexyJson 模型
使用说明
Json 转换为模型对象(json -> 模型)
let model = Model.sexy_json(json)
模型对象转换为字典(model -> 字典)
let dictionary = model.sexy_dictionary()
模型对象转换为 Json 字符串(model -> json)
let jsonStr = model.sexy_json()
SexyJson 支持 json 解析键路径
let subArrayModel = SubArray.sexy_json(json, keyPath: "subArray[0]")
let subNestArray = NestArray.sexy_json(json, keyPath: "nestArray[0][0]")
let test = String.sexy_json(json, keyPath: "nestArray[0][0].test")
Json 转换为模型数组对象(json -> [模型])
let arrayModel = [Model].sexy_json(json)
模型对象数组转换为数组([模型] -> 数组)
let array = arrayModel.sexy_array()
模型对象数组转换为 Json 字符串([模型] -> json)
let arrayJson = arrayModel.sexy_json()
SexyJson 支持 model kvc( 模型类实现 Codable 协议 )
let sub = Sub.sexy_json(json, keyPath: "sub")
if let modelCodingData = try? JSONEncoder().encode(modelCoding) {
if let modelUncoding = try? JSONDecoder().decode(Sub.self, from: modelCodingData) {
print("modelUncodingJson = \(modelUncoding.sexy_json()!)")
}
}
提示
如果您想查看分析结果,请下载此演示以检查具体用法
许可
所有源代码均受 MIT 许可协议许可。