无法解码 JSON,因为模型是可识别的

Spa*_*Dog 0 json swift codable

我有一个像这样的 JSON

[
 {
   "name": "car",
   "color": "red"
 },
 {
   "name": "bike",
   "color": "blue"
 },
  ... etc
]
Run Code Online (Sandbox Code Playgroud)

我在解码过程中可以使用这个模型

struct Element:Codable {
  var name:String?
  var color:String?
}
Run Code Online (Sandbox Code Playgroud)

稍后在代码中我有ScrollView这样的

 ScrollView(.vertical, showsIndicators: false) {
        LazyVGrid(columns: gridItemLayout, alignment: .center, spacing: 10, content: {
          ForEach(allElements) { element in
Run Code Online (Sandbox Code Playgroud)

allElements是一个数组Element

因为我allElements在那里使用,所以我必须使其Element可识别......

struct Element:Codable, Identifiable {
  var id = UUID()
  var name:String?
  var color:String?
}
Run Code Online (Sandbox Code Playgroud)

现在它无法解码 JSON,因为 JSON 没有id.

我尝试添加

"id" : "",
Run Code Online (Sandbox Code Playgroud)

JSON 上的所有元素均未成功。

有任何想法吗?

Dáv*_*tor 9

您只需告诉编译器这id不是 JSON 的一部分。您可以通过声明CodingKey符合enum您的Codable类型来做到这一点。

综合方法将仅使用兼容Codable中的密钥来解码/编码您的类型。因此,如果您省略and仅指定and ,则不会尝试在 JSON 中查找键。CodingKeyenumidenumnamecolorCodableid

struct Element: Codable, Identifiable {
    let id = UUID()
    var name:String?
    var color:String?
    
    private enum CodingKeys: String, CodingKey {
        case color
        case name
    }
}
Run Code Online (Sandbox Code Playgroud)