Skip to content

Latest commit

 

History

History
47 lines (35 loc) · 5.21 KB

CompareWithHandyJSON.md

File metadata and controls

47 lines (35 loc) · 5.21 KB

SmartCodable - Compare With HandyJSON

序号 🎯 特性 💬 特性说明 💬 SmartCodable HandyJSON
1 强大的兼容性 完美兼容:字段缺失 & 字段值为nul & 字段类型错误
2 类型自适应 如JSON中是一个Int,但对应Model是String字段,会自动完成转化
3 解析Any 支持解析 [Any], [String: Any] 等类型
4 解码回调 支持Model解码完成的回调,即:didFinishingMapping
5 属性初始化值填充 当解析失败时,支持使用初始的Model属性的赋值。
6 字符串的Model化 字符串是json字符串,支持进行Model化解析
7 枚举的解析 当枚举解析失败时,支持兼容。
8 属性的自定义解析 - 重命名 自定义解码key(对解码的Model属性重命名)
9 属性的自定义解析 - 忽略 忽略某个Model属性的解码
10 支持designatedPath 实现自定义解析路径
11 Model的继承 在model的继承关系下,Codable的支持力度较弱,使用不便(可以支持)
12 自定义解析路径 指定从json的层级开始解析
13 超复杂的数据解码 解码过程中,多数据做进一步的整合/处理。如: 数据的扁平化处理 ⚠️
14 解码性能 在解码性能上,SmartCodable 平均强 30% ⚠️
15 异常解码日志 当解码异常进行了兼容处理时,提供排查日志
16 安全性方面 底层实现的稳定性和安全性。

整体来讲: SmartCodable 和 HandyJSON 相比,在功能和使用上相近。

安全性 & 稳定性

  • HandyJSON 使用Swift的反射特性来实现数据的序列化和反序列化。该机制是非法的,不安全的, 更多的细节请访问 HandyJSON 的466号issue.

  • Codable 是Swift标准库的一部分,提供了一种声明式的方式来进行序列化和反序列化,它更为通用。

使用SmartCodable 平替 HandyJSON

更多内容请查看: 替换指导

内容项 内容项说明 使用场景 替换难度 评判理由
①声明Model 声明Model ★★★★★ ★☆☆☆☆ 全局将 HandyJSON 替换为 SmartCodable即可。
②反序列化 数据的模型化(数据转Model) ★★★★★ ☆☆☆☆☆ 完全一样的调用方式,无需处理。
③序列化 模型的数据化(Model转数据) ★☆☆☆☆ ★☆☆☆☆ toJSON() 替换为 toDictionary()toArray()
④解码完成的回调 解析完成进一步处理数据 ★★☆☆☆ ☆☆☆☆☆ 完全一样的调用方式,无需处理。
⑤自定义解析Key 忽略key的解析 & 自定义Key的映射关系 ★★★☆☆ ★★★☆☆ 需要更改调用方式。
⑥解析Any 解析Any类型的数据。Any,[String: Any], [Any] ★☆☆☆☆ ★☆☆☆☆ 将Any替换为SmartAny
⑦处理继承关系 解析存在的继承关系的Model ★☆☆☆☆ ★★★★★ 建议使用协议实现。
⑧枚举的解析 解析枚举属性 ★☆☆☆☆ ★☆☆☆☆ 多实现一个 defaultCase