用 Codable 协议实现快速 JSON 解析

本文介绍了Swift中的Codable协议,用于快速而简洁地处理JSON数据解析和编码。通过实现Codable协议,开发者可以避免手动编写解析代码,减少错误并提高效率。文章通过示例展示了如何使用Codable进行JSON解析和编码,包括使用CodingKeys进行属性选择和自定义编码解码过程。同时,还探讨了如何处理更复杂的数据结构,保持代码结构清晰。
摘要由CSDN通过智能技术生成

如果你是一名有一定开发经验的开发者,那么你就一定会遇到过数据解析的问题。 最常见的就是 JSON 数据的解析,你的 APP 总会要请求一些服务器数据,比如各种信息列表,配置数据等。

如果你之前用过 Objective-C 的话, 那么你一定对 NSJSONSerialization 并不陌生。 它的总体步骤大致是这样,先从 Data对象中解析出 NSDictionary 或 NSArray, 然后在从这里面按照属性名称取出需要的值,最后再用这些值给实体对象赋值。

总体来说这个操作并不轻松,而且比较容易出差错,比如你在写解析代码的时候把属性名写错了,或者某个 nil 判断没有处理正确,导致了程序意外崩溃,就需要花不少时间进行调试。

Codable

我们的主题自然不是 NSJSONSerialization, 而是 Swift 中提供的 Codable 协议。 它和前者有着相似的作用,但应用范围更广,并且易用性更好。 先来看一下 Codable 协议的定义:

typealias Codable = Decodable & Encodable

它其实另外两个 Protocol 的集合,也就是 Decodable 和 Encodable。 一个用作数据解析,另一个用作数据编码。 其他不多说,咱们先来看一个实例,我们先声明一个实体类 Person 它声明实现了 Codable

struct Person : Codable {

var name: String
var gender: String
var age: Int

}

除了声明 Codable 之外,这个实体类并没有其他代码,只有几个属性声明。 如果我们需要把他的实例编码成 JSON 字符串,可以这样:

let person = Person(name: "swift", gender: "male", age: 24)

let encoder = JSONEncoder()
let data = try! encoder.encode(person)
let encodedString = String(data: data, encoding: .utf8)!
print(encodedString) // 输出 { "name": "swift", "age": 24, "gender": "male"}

如上所示,首先初始化了一个 Person 实例。 然后初始化了一个 JSONEncoder。 再调用它的 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值