SexyJson 1.2.2

SexyJson 1.2.2

测试已测试
Lang语言 SwiftSwift
许可证 MIT
发布上次发布2020年1月
SPM支持 SPM

netyouli 维护。



SexyJson 1.2.2

  • 吴海超(WHC)

SexyJson

Build Status Pod Version Platform Pod License

SexyJson 是 Swift5+ fast json parse 开源库,简单直观,完美支持 class 和 struct 模型,支持 KVC 模型,完全面向协议架构,支持 iOS 和 MAC OS X

Objective-c 版本 👉 WHC_Model

更新:支持兼容 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 许可协议许可。