我有一些可以用JSONDecoder解析的“徽章”列表的静态数据。我想添加一个不在json数据中的状态,当我将变量添加到Badge结构中时,解析失败。
然后,我尝试创建两个不同的结构,BadgeData被解析,Badge包含状态变量和BadgeData。但我如何将其与状态变量以一种好的方式合并呢?有没有更好的结构呢?
import Foundation
final class ModelData: ObservableObject {
@Published var badges: [Badge] = // ??
var badgeData: [BadgeData] = load("badges.json")
var taken: [Int] = load("taken.json")
}
struct BadgeData: Hashable, Codable, Identifiable {
let id: Int
let title: String
let imageRef: String
let requirements: [Requirement]
}
struct Badge: Hashable, Codable, Identifiable {
let data: BadgeData
var id: Int {
data.id
}
var isTaken: Bool
}
struct Requirement: Hashable, Codable, Identifiable {
var id: Int
let title: String
let detail: String
}
1条答案
按热度按时间rta7y2nd1#
当我将变量添加到标记结构中时,解析失败。
你需要coding keys。
通过定义编码键,您可以确定从JSON获得哪些属性以及忽略哪些属性
CodingKeys
中的案例一对一地Map到您想要从JSON反序列化的属性。还要注意,
CodingKeys
有一个原始类型,即String
。这意味着您的JSON中可以有不同的属性名称键,例如意味着对象中的
imageRef
属性来自JSON中的image_ref
属性。