Swift专辑收录swift学习专题三方集成&框架库

Swift中的JSON解析选择

2020-07-16  本文已影响0人  左说方言

起因:新开Swift项目,在SwiftyJSON、ObjectMapper、HandyJSON、Codable选择一个做项目的JSON解析。
主要对这些框架进行了以下两点的考量
1.正常的使用中、客户端的属性值和接口返回的key是一一对应的,我们不应该重复的写映射关系,
2.如果服务器返回了错误的类型,是否能进行了一些容错处理。(age定义为String类型,但服务端返回Int类型)
结论:基于以上两点,最终选择HandyJSON。

SwiftyJSON

SwiftyJSON的使用:

let jsonString = "{\"name\":\"jsonNmae\",\"age\":20,\"someInt\":30}"
let jsonData = jsonString.data(using: .utf8)!
let swiftyJson = try! JSON(data: jsonData)
print(swiftyJson.type)
print("name:\(swiftyJson["name"])")
print(swiftyJson["age"])
print(swiftyJson["age"].string as Any)
print("sex:\(swiftyJson["sex"])")
SwiftyJSON

没有选择SwiftyJSON的原因:
1.SwiftyJSON并没有把数据转换成model类,如果没有对照接口文档开发,将不知道这个接口返回了那些字段。
2.如果我使用了错误的类型,它并没有做太多的处理,返回了nil。

Codable

Codable的使用

class CodableModel1: Codable {
    var name = ""
    var someInt = 0
    var age = ""
}
do {
    let codableModel = try JSONDecoder().decode(CodableModel1.self, from: jsonData)
    print(codableModel.name)
    print(codableModel.age)
    print(codableModel.someInt)
} catch let error {
    print(error)
}
Codable

Codable 进行了model化,但Codable遇到了同样的问题:
如果我使用了错误的类型,Codable没有做任何处理,并且会导致解析失败,整个model类无法初始化,如果是粗心的程序员,可能会导致crash。

ObjectMapper

ObjectMapper的使用

class MapModel: Mappable {
    required init?(map: Map) {}
    func mapping(map: Map) {
        name    <- map["name"]
        age     <- map["age"]
    }
    var name = ""
    var age = ""
    var someInt = 0
}
let mapModel = MapModel(JSONString: jsonString)!
print(mapModel.age)
print(mapModel.name)
print(mapModel.someInt)
ObjectMapper

没有选择ObjectMapper有以下几个考量:
1.每一个model类需要写映射关系,

  1. ObjectMapper对错误类型进行了兼容,但ObjectMapper没有对返回值进行尝试转换,他返回了空(非nil)。

HandyJSON

class HandyModel: HandyJSON {
    required init() {}
    var name = ""
    var age = ""
}
let handyModel = HandyModel.deserialize(from: jsonString)!
print("age:" + handyModel.age)
print(handyModel.name)
HandyJSON

对比其他框架,HandyJSON有便利性和错误类型处理上有更多的处理,最终选择HandyJSON作为新项目的JSON解析框架。

上一篇下一篇

猜你喜欢

热点阅读