iOS系统中Swift 4 JSON解析过程指南
Swift 4 JSON 解析指南2017-07-07 11:08程序设计
Apple 终于在 Swift 4 的 Foundation 的模块中添加了对 JSON 解析的原生支持。
虽然已经有很多第三方类库实现了 JSON 解析,但是能够看到这样一个功能强大、易于使用的官方实现还是不免有些兴奋。
值得注意的是,官方的实现方式适用于任何 Encoder/Decoder ,例如 PropertyListEncoder 。当然如果你需要 XML 格式的内容,可以进行自定义实现。在接下来的内容中,我们将专注于 JSON 格式的解析,因为这是 iOS 开发中最常见的数据格式。
基础
如果你的 JSON 数据结构和你使用的 Model 对象结构一致的话,那么解析过程将会非常简单。
下面是一个 JSON 格式的啤酒说明:
{
“name”: “Endeavor”,
“abv”: 8.9,
“brewery”: “Saint Arnold”,
“style”: “ipa”
}
对应的 Swift 数据结构如下:
enum BeerStyle : String {
case ipa
case stout
case kolsch
// 。。.
}
struct Beer {
let name: String
let brewery: String
let style: BeerStyle
}
为了将 JSON 字符串转化为 Beer 类型的实例,我们需要将 Beer 类型标记为 Codable。
Codable 实际上是 Encodable & Decodable 两个协议的组合类型,所以如果你只需要单向转换的话,你可以只选用其中一个。该功能也是 Swift 4 中引入的最重要新特性之一。
Codable 带有默认实现,所以在大多数情形下,你可以直接使用该默认实现进行数据转换。
enum BeerStyle : String, Codable {
// 。。.
}
struct Beer : Codable {
// 。。.
}
下面只需要创建一个解码器:
let jsonData = jsonString.data(encoding: .utf8)!
let decoder = JSONDecoder()
let beer = try! decoder.decode(Beer.self, for: jsonData)
这样我们就将 JSON 数据成功解析为了 Beer 实例对象。因为 JSON 数据的 Key 与 Beer 中的属性名一致,所以这里不需要进行自定义操作。
需要注意的是,这里直接使用了 try! 操作。因为这里只是简单示例,所以在真实程序中你应该对错误进行捕获并作出对应的处理。
但是,现实中不可能一直都是完美情形,很大几率存在 Key 值与属性名不匹配的情形。
自定义键值名
通常情形下,API 接口设计时会采用 snake-case 的命名风格,但是这与 Swift 中的编程风格有着明显的差异。
为了实现自定义解析,我们需要先去看下 Codable 的默认实现机制。
默认情形下 Keys 是由编译器自动生成的枚举类型。该枚举遵守 CodingKey 协议并建立了属性和编码后格式之间的关系。
为了解决上面的风格差异需要对其进行自定义,实现代码:
struct Beer : Codable {
// 。。.
enum CodingKeys : String, CodingKey {
case name
case abv = “alcohol_by_volume”
case brewery = “brewery_name”
case style
}
}
现在我们将 Beer 实例转化为 JSON ,看看自定义之后的 JSON 数据格式:
let encoder = JSONEncoder()
let data = try! encoder.encode(beer)
print(String(data: data, encoding: .utf8)!)
输出如下:
{“style”:“ipa”,“name”:“Endeavor”,“alcohol_by_volume”:8.8999996185302734,“brewery_name”:“Saint Arnold”}
上面的输出格式对阅读起来并不是太友好。不过我们可以设置 JSONEncoder 的
outputFormatting 属性来定义输出格式。
默认 outputFormatting 属性值为 .compact,输出效果如上。如果将其改为 .prettyPrinted 后就能获得更好的阅读体检。
encoder.outputFormatting = .prettyPrinted
非常好我支持^.^
(0) 0%
不好我反对
(0) 0%
下载地址
iOS系统中Swift 4 JSON解析过程指南下载
相关电子资料下载
- iOS17.1可能明天发布,iOS17.1主要修复哪些问题? 377
- systemverilog读取json文件? 60
- C结构体与JSON快速互转库介绍 86
- 华为全新鸿蒙蓄势待发 仅支持鸿蒙内核和鸿蒙系统应用 719
- 苹果手机系统iOS 17遭用户质疑 731
- iPhone12辐射超标?苹果推送iOS 17.1解决此事 750
- RT-Thread使用cjson软件包发送64位长整型数据 100
- 传华为囤积零部件 目标明年智能手机出货7000万部;消息称 MiOS 仅限国内,小米 28208
- Spring Boot时配置JSON序列化选项的几种方法 142
- 苹果推送iOS17.0.3,解决iPhone15Pro系列存在机身过热 216