import SwiftUI class Oxydol : Codable { var name: String var kind: String var formula: String var images: [String] enum CodingKeys: String, CodingKey { case name, kind, formula, images } init() { self.name = "oxydol" self.kind = "物質" self.formula = "H2O2" self.images = ["oxydol"] } required convenience init(from decoder: Decoder) throws { self.init() let values = try decoder.container(keyedBy: CodingKeys.self) self.name = try values.decode(String.self, forKey: .name) self.kind = try values.decode(String.self, forKey: .kind) self.formula = try values.decode(String.self, forKey: .formula) self.images = try values.decode([String].self, forKey: .images) } func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) try container.encode(name, forKey: .name) try container.encode(kind, forKey: .kind) try container.encode(formula, forKey: .formula) try container.encode(images, forKey: .images) } } let encoder = JSONEncoder() let value = Oxydol() if let data = try? encoder.encode(value), let str = String(data:data, encoding:.utf8) { print(str) } print("------") let data = "{\"kind\":\"物質2\",\"name\":\"oxydol2\",\"images\":[\"oxydol\",\"oxydol2\"],\"formula\":\"H2O2\"}".data(using:.utf8)! let decoder = JSONDecoder() if let dvalue = try? decoder.decode(Oxydol.self, from:data) { print("name= \(dvalue.name)") print("kind= \(dvalue.kind)") print("formula= \(dvalue.formula)") print("images[1]= \(dvalue.images[1])") }