【发布时间】:2019-02-08 05:54:37
【问题描述】:
我正在尝试从对应的“数据”对象序列化后看起来像这样的 JSON 解码我的模型对象(目录)数组。
{ "id" : 5,
"catalogs" : [ {catalogKeyValue1},{catalogKeyValue2}]
}
我的模型对象看起来像这样
struct Catalog : Codable{
var id : Int
var name : String
var categoryId : Int
var minProductPrice : Int
var maxProductDiscount : Int?
var shareText : String
var collageImage : String
var collageImageAspectRatio : Double?
var shipping : [String : Int]?
var description : String
}
解码后,我需要获取一个目录数组(嵌套在 JSON 中的“目录”键上)。我完全理解使用嵌套容器并为目录结构编写自定义初始化程序。我怎样才能实现这一点而无需编写另一个看起来像这样的外部 JSOn 的可编码结构
struct CatalogArray: Codable {
var catalogs : [Catalog]
}
然后做这样的事情来得到一个解码的目录数组
let catalogArray = try decoder.decode(CatalogArray.self, from: validData)
我的问题是我不需要这个 catalogArray 结构。有没有一种无需创建不必要的嵌套结构即可解码目录模型对象的方法。
【问题讨论】:
-
您需要编写额外的代码,理论上应该可以在没有中间结构的情况下实现这一点,但这意味着要编写更多的解码代码。所以不管有没有中间结构,你都需要编写额外的代码。
-
更多的结构有什么问题?如果你给他们起个好名字,他们就不会弄乱你的代码。
-
更多 Codable 结构的问题是,如果相同的目录数组在另一个 API 响应中带有不同的键,我将需要创建另一个结构。
-
@TarunBhargava 你可以像我的回答一样创建通用结构
标签: ios swift iphone codable jsondecoder