博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Swift-JSON Encode && Decode
阅读量:7250 次
发布时间:2019-06-29

本文共 2571 字,大约阅读时间需要 8 分钟。

typealias Codable = Encodable & Decodablestruct Employee: Codable {    var name:String    var id: Int    var mToy:Toy}struct Toy:Codable {    var name:String}extension Employee:CustomStringConvertible {    var description: String {        return name + "(" + String(id) + "): " + mToy.name    }}        /// encode instance to jsonString        let toyA = Toy(name: "Teddy Bear")        let employeeA = Employee(name: "EmployA", id:1, mToy:toyA)        let jsonEncoder = JSONEncoder()        let jsonData = try? jsonEncoder.encode(employeeA)        // Xcode omits jsonData and only provides the number of bytes in jsonData        // jsonData contains an unreadable representation of employeeA        print("jsonData: \(jsonData)")        let jsonString = String(data: jsonData!, encoding: .utf8)        print("jsonString: \(jsonString)")                        /// decode jsonString to instance        let jsonDecoder = JSONDecoder()        let employeeADecoded = try? jsonDecoder.decode(Employee.self, from: jsonData!)        print(employeeADecoded!) //result /*

  jsonData: Optional(54 bytes)

  jsonString: Optional("{\"name\":\"EmployA\",\"id\":1,\"mToy\":{\"name\":\"Teddy Bear\"}}")

  EmployA(1): Teddy Bear

*/

 

假设,现在后台改接口了

from : {\"name\":\"EmployA\",\"id\":1,\"mToy\":{\"name\":\"Teddy Bear\"}}

to : {\"name\":\"EmployA\",\"gift\":\"Teddy Bear\",\"emplyeeID\":1}

 

需要实现encoding 和 decoding的逻辑。

encode 需要实现 encode(to: Encoder) throws

decode 需要实现 init(from decoder: Decoder) throws

//typealias Codable = Encodable & Decodablestruct Employee{    var name:String    var id: Int    var mToy:Toy        enum CodingKeys: String, CodingKey{        case id = "emplyeeID"        case name        case gift    }}extension Employee: Encodable {    func encode(to encoder: Encoder) throws {        var container = encoder.container(keyedBy: CodingKeys.self)        try container.encode(name, forKey: .name)        try container.encode(id, forKey: .id)        try container.encode(mToy.name, forKey: .gift)    }}extension Employee:Decodable {    init(from decoder: Decoder) throws {        let values = try decoder.container(keyedBy: CodingKeys.self)        name = try values.decode(String.self, forKey: .name)        id = try values.decode(Int.self, forKey: .id)        let gift = try values.decode(String.self, forKey: .gift)        mToy = Toy(name: gift)    }}extension Employee:CustomStringConvertible {    var description: String {        return name + "(" + String(id) + "): " + mToy.name    }}struct Toy{    var name:String}

 

转载于:https://www.cnblogs.com/HackHer/p/8507888.html

你可能感兴趣的文章
三周第一次课
查看>>
解决手机运行appium会自动安装settingapp和unlock
查看>>
SAP S/4HANA CDS View的访问控制实现:DCL介绍
查看>>
快速了解掌握中文自然语言处理
查看>>
omni core api速查表
查看>>
比特币 的 正统 ——BCH
查看>>
【2018.07.11学习笔记】【linux高级知识 20.1-20.4】
查看>>
Spring Cloud Config客户端使用
查看>>
多年经验的大牛总结出来的Python案例超详细
查看>>
Gradle实现Android多渠道定制化打包
查看>>
Ubuntu 16.4下 Docker 安装文档
查看>>
GoJS图表组件简介
查看>>
百度AI开放平台,共建AI生态
查看>>
ES6 fetch函数与后台交互实现
查看>>
盘点5月份GitHub上最热门的开源项目
查看>>
SpringBoot + Dubbo的项目如何优雅停机
查看>>
Eclipse设置源文件的编码方式UTF-8
查看>>
ppt如何导出成高清图片
查看>>
PyQt5教程(七)——控件(II)
查看>>
Vyatta设置
查看>>