美文网首页
Swift-HandyJSON的使用

Swift-HandyJSON的使用

作者: yyggzc521 | 来源:发表于2021-11-21 20:35 被阅读0次

HandyJson 是阿里巴巴开源的一个用于Swift语言中的JSON序列化/反序列化库,可以很方便进行json与model的转换,以及常用的字典与模型的互相转换

JSON转Model

只需要在定义时,实现HandyJSON协议,这个协议只要求实现一个空的init()函数

  • 定义model
class Animal: HandyJSON {
    var name: String?
    var id: String?
    var num: Int?

    required init() {} // 如果定义是struct,连init()函数都不用声明;
}
  • 转换
if let animal = JSONDeserializer<Animal>.deserializeFrom(json: jsonString) {
    print(animal.name)
    print(animal.id)
    print(animal.num)
}

指定反序列化JSON中某个节点

有时服务端返回的JSON文本包含大量的状态信息,和Model无关,比如statusCode,debugMessage等,或者有用的数据是在某个节点以下,那么我们可以指定反序列化哪个节点:

struct Cat: HandyJSON {
    var id: Int64!
    var name: String!
}

// 服务端返回了这个JSON,我们想解析的只有data里的cat
let jsonString = "{\"code\":200,\"msg\":\"success\",\"data\":{\"cat\":{\"id\":12345,\"name\":\"Kitty\"}}}"

// 那么,我们指定解析 "data.cat",通过点来表达路径
if let cat = JSONDeserializer<Cat>.deserializeFrom(json: jsonString, designatedPath: "data.cat") {
    print(cat.name)
}

自定义解析方式

HandyJSON还提供了一个扩展能力,就是允许自行定义Model类某个字段的解析Key、解析方式

HandyJSON协议提供了一个可选的mapping()函数,我们可以在其中指定某个字段用什么Key、或者用什么方法从JSON中解析出它的值

class Cat: HandyJSON {
    var id: Int64!
    var name: String!
    var parent: (String, String)?

    required init() {}
}

let jsonString = "{\"cat_id\":12345,\"name\":\"Kitty\",\"parent\":\"Tom/Lily\"}"

可以看到,Cat类的id属性和JSON文本中的Key是对应不上的;而对于parent这个属性来说,它是一个元组,做不到从JSON中的"Tom/Lily"解析出来。所以我们要定义一个Mapping函数来做这两个支持:

class Cat: HandyJSON {
    var id: Int64!
    var name: String!
    var parent: (String, String)?

    required init() {}

    func mapping(mapper: HelpingMapper) {
        // 指定 id 字段用 "cat_id" 去解析
        mapper.specify(property: &id, name: "cat_id")

        // 指定 parent 字段用这个方法去解析
        mapper.specify(property: &parent) { (rawString) -> (String, String) in
            let parentNames = rawString.characters.split{$0 == "/"}.map(String.init)
            return (parentNames[0], parentNames[1])
        }
    }
}

Model转JSON

直接调用HandyJSON的序列化方法去序列化,就能得到JSON字符串

JSONSerializer.serializeToJSON(object: xxx)

阿里巴巴最新开源项目 - [HandyJSON] 在Swift中优雅地处理JSON

相关文章

  • Swift-HandyJSON的使用

    HandyJson 是阿里巴巴开源的一个用于Swift语言中的JSON序列化/反序列化库,可以很方便进行json与...

  • Swift-HandyJSON:优雅地处理JSON

    项目名称:HandyJSON[https://github.com/alibaba/handyjson] 背景 J...

  • SWIFT-HandyJSON 简单封装 model之间转换

  • iconfont的使用(下载使用)

    1、下载文件 2、在生命周期中引入项目 beforeCreate () { var domModule = ...

  • Gson的使用--使用注解

    Gson为了简化序列化和反序列化的过程,提供了很多注解,这些注解大致分为三类,我们一一的介绍一下。 自定义字段的名...

  • 记录使用iframe的使用

    默认记录一下----可以说 这是我第一次使用iframe 之前都没有使用过; 使用方式: 自己开发就用了这几个属...

  • with的使用

    下面例子可以具体说明with如何工作: 运行代码,输出如下

  • this的使用

    什么是this? this是一个关键字,这个关键字总是返回一个对象;简单说,就是返回属性或方法“当前”所在的对象。...

  • this的使用

    JS中this调用有几种情况 一:纯粹的函数调用 这是函数的最通常用法,属于全局性调用,因此this就代表全局对象...

  • ==的使用

    积累日常遇到的编码规范,良好的编码习惯,持续更新。。。 日常使用==用于判断的时候,习惯性将比较值写前面,变量写后...

网友评论

      本文标题:Swift-HandyJSON的使用

      本文链接:https://www.haomeiwen.com/subject/pspmtrtx.html