В вашем JSON отсутствуют некоторые запятые, правильный JSON:
[
{
"product_id": 10,
"product_name": "Bulb",
"tags": ["x", "y", "z"]
},
{
"product_id": 11,
"product_name": "Wire"
}
]
product_id
в вашем коде - это String
, тогда как в вашем JSON это число.
Swift может фактически обрабатывать пропущенные ключи, как это, если вы сделаете свойство необязательным, что вы правильно сделали здесь.tags
будет назначено nil
, если в JSON нет ключа.Поэтому вам не нужно ничего делать, кроме как изменить product_id
на Int
.
Ваши имена свойств также можно переименовать, чтобы они стали более Swifty, если вы используете опцию convertFromSnakeCase
при декодировании:
struct ProductItem: Codable {
let productId: Int?
let productName: String?
let tags: [String]?
}
let decoder = JSONDecoder()
decoder.keyDecodingStrategy = .convertFromSnakeCase
let decoded = try! decoder.decode([ProductItem].self, from: data)
print(decoded[1].tags) // nil