Проблема, с которой вы сталкиваетесь, заключается в том, что ваш JSON
возвращает разные данные для ваших фруктов.
Для 1-го идентификатора возвращается String
с именем name
, но во 2-м возвращается строковое значение title
.
Кроме того, при анализе JSON идентификатор выглядит как String
, а не Int
.
Таким образом, у вас есть два необязательных значения из ваших данных.
Таким образом, ваша Декодируемая Структура должна выглядеть примерно так:
struct Response: Decodable {
let fruits: [Fruits]
}
struct Fruits: Decodable {
let id: String
let image: String
let name: String?
let title: String?
}
Поскольку ваш URL-адрес недействителен, я создал файл JSON в своем основном комплекте и смог его правильно проанализировать, например:
/// Parses The JSON
func parseJSON(){
if let path = Bundle.main.path(forResource: "fruits", ofType: "json") {
do {
let data = try Data(contentsOf: URL(fileURLWithPath: path), options: .mappedIfSafe)
let jsonResult = try JSONDecoder().decode(Response.self, from: data)
let fruitsArray = jsonResult.fruits
for fruit in fruitsArray{
print("""
ID = \(fruit.id)
Image = \(fruit.image)
""")
if let validName = fruit.name{
print("Name = \(validName)")
}
if let validTitle = fruit.title{
print("Title = \(validTitle)")
}
}
} catch {
print(error)
}
}
}
Надеюсь, это поможет ...