快速将数据解析为自定义数据对象
Posted
技术标签:
【中文标题】快速将数据解析为自定义数据对象【英文标题】:Parse data to custom data object in swift 【发布时间】:2018-03-14 10:03:58 【问题描述】:我正在尝试在 swift 4 中使用 codable 将 comming 数据解析为自定义对象,但仍然不知道确切。 这是我的自定义类:
class Response_Model : Codable
var id : String?
var code : String?
enum CodingKeys: String, CodingKey
case id = "id"
case code = "code"
init()
id = ""
code = ""
required init(from decoder: Decoder) throws
let values = try decoder.container(keyedBy: CodingKeys.self)
id = try values.decodeIfPresent(String.self, forKey: .id)
code = try values.decodeIfPresent(String.self, forKey: .code)
func encode(with aCoder: NSCoder)
aCoder.encode(id, forKey: "id")
aCoder.encode(code, forKey: "code")
在这里我试图解析共鸣:
responseModel = try jsonDecoder.decode([Response_Model].self, from: result as! Data)
这是回应:
[
"id": "38",
"code": "code1"
,
"id": "39",
"code": "code2"
]
谢谢
【问题讨论】:
你的问题是什么? 解码没有成功完成? 首先你必须像这样使用 ->class Response_Model : NSObject, Codable
第二件事是问清楚的问题。
在操场上使用上面的代码,我可以成功地将 JSON 解码为模型并打印出每个值。
【参考方案1】:
你的代码太繁琐了,Codable
协议提供的大部分样板代码都是免费的。
类可以简化为(顺便说一句,在大多数情况下struct
就足够了)
struct ResponseModel : Codable
var id : String
var code : String
现在解码 JSON
let jsonString = """
[
"id": "38", "code": "code1",
"id": "39", "code": "code2"
]
"""
do
let data = Data(jsonString.utf8)
let result = try JSONDecoder().decode([ResponseModel].self, from: data)
for item in result
print(item.code, item.id)
catch print(error)
【讨论】:
以上是关于快速将数据解析为自定义数据对象的主要内容,如果未能解决你的问题,请参考以下文章
尝试将变量保存为自定义解析对象列表(UserRecipe)并将它们打印到 xcode 控制台