JSON Wars:可编码⚔️Unbox

最初发表在 Swift Post上

Codable让所有人都感到兴奋,因为我们都喜欢解析JSON,并且很高兴将此工具作为标准库的一部分。 现在是时候测试它是否值得成为我们最喜​​欢的一个了。

让我们看看Codable在恶劣条件下的性能。 我们将使用Codable解析以下JSON,然后将其与流行的Unbox / Wrap实现进行比较。

{ 
“placeName”: “İstanbul, Turkey”,
“lat”: 41.0049823,
“lon”: 28.7319958,
“dateAdded”: “2018-05-25”,
“info”: “İstanbul is a very historical city.”
}

我们希望我们的数据模型如下所示。

 struct Place: Codable { 
let name: String
let coordinate: Coordinate
let dateAdded: Date
let info: String?
}
 struct Coordinate { 
let latitude: Decimal
let longitude: Decimal
}

挑战

  • placeNamename不匹配。 我们需要调整编码键。
  • 两个单独的键latlon成为坐标对象。 需要自定义解码。
  • 我们需要对dateAdded字段使用YYYY-mm-dd日期格式。
  • 如果缺少namecoordinatedateAdded字段,但info字段为可选字段,则需要抛出错误。

使用可编码实现

在大多数情况下,它无需任何自定义即可工作。 尽管由于键的类型强而使高级用法有时会很复杂,但它很容易学习。 Codable就像瑞士军刀一样,所以我想不出您无法处理的任何情况。

我开始写这篇文章时认为,与高级使用的Codable相比,Unbox更加简单易读,但是示例代码表明并非如此。 现在可能是时候摆脱所有第三方JSON解析框架,并使Codable和平相处了。

很好玩,苹果。