Здравствуйте, у меня есть код для декодинга JSON
struct NewsModel: Decodable {
let error: Int
let news: [NewsItem]
private enum CodingKeys : String, CodingKey {
case news = "data"
case error = "error"
}
init(from decoder: Decoder) throws {
let container = try decoder.container(keyedBy: CodingKeys.self)
news = try container.decode([NewsItem].self, forKey: .news)
error = try container.decode(Int.self, forKey: .error)
}}
struct NewsItem: Decodable {
let id: Int
let title: String
let teaser: String
let delayDate: String
let category : Category
private enum CodingKeys : String, CodingKey {
case id = "id"
case title = "title"
case delayDate = "delay_date"
case teaser = "teaser"
case category = "cat"
}
init(from decoder: Decoder) throws {
let container = try decoder.container(keyedBy: CodingKeys.self)
id = try container.decode(Int.self, forKey: .id)
title = try container.decode(String.self, forKey: .title)
teaser = try container.decode(String.self, forKey: .teaser)
delayDate = try container.decode(String.self, forKey: .delayDate)
category = try container.decode(Category.self, forKey: .category)
}}
struct Category: Decodable {
let id: Int
let languageId: String
let slug: String
let description: String
private enum CodingKeys : String, CodingKey {
case id = "category_id"
case language = "language_id"
case slug = "slug"
case description = "description"
}
init(from decoder: Decoder) throws {
let container = try decoder.container(keyedBy: CodingKeys.self)
id = try container.decode(Int.self, forKey: .id)
languageId = try container.decode(String.self, forKey: .language)
slug = try container.decode(String.self, forKey: .slug)
description = try container.decode(String.self, forKey: .description)
}}
Тут все верно
А вот функция
var arrData = Article_Data
func getCoinData() {
let jsonURL = "https://abctv.kz/ru/api/v1/getNewsByCategory?id=22"
guard let url = URL(string: jsonURL) else { return }
URLSession.shared.dataTask(with: url) { [unowned self] (data, response, error) in
guard let data = data else { return }
do {
let decoder = JSONDecoder()
decoder.keyDecodingStrategy = .convertFromSnakeCase
let data_new = try decoder.decode(News_data.self, from: data)
DispatchQueue.main.async {
self.arrData = data_new.data.news
self.tableview.reloadData()
}
} catch {
print("Error is : \n\(error)")
}
}.resume()
}
Вот JSON
{"error": 0,"data": [
{
"id": 14845,
"title": "Текст новости",
"teaser": "В этом году было выявлено 47 положительных проб.\r\n",
"delay_date": "2018-12-11 03:03:00",
"cat": {
"category_id": 17,
"language_id": "ru",
"slug": "sport",
"description": "",
"title": "Новость",
},
}
]
В консоле пишет Expected to decode Array but found a dictionary instead
Как я понял от меня ожидается массив
Как мне исправить это?