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

Fail to decode JSON because the model is Identifiable

我有一个JSON这样的

[
 {
   "name": "car",
   "color": "red"
 },
 {
   "name": "bike",
   "color": "blue"
 },
  ... etc
]

并且我在解码过程中使用了这个模型

struct Element:Codable {
  var name:String?
  var color:String?
}

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

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

allElementsElement.

的数组

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

struct Element:Codable, Identifiable {
  var id = UUID()
  var name:String?
  var color:String?
}

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

我已经尝试添加

"id" : "",

到 JSON 上的所有元素都没有成功。

有什么想法吗?

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

合成的 Codable 方法将仅使用符合 CodingKeyenum 中的键用于 decoding/encoding 您的类型。因此,如果您从 enum 中省略 id 并且仅指定 namecolorCodable 将不会尝试寻找 id键入 JSON.

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