Я хочу получить данные JSON. Я создал Struct, но этот Struct, похоже, не работает. Когда я запускаю свой код, я получаю такую ошибку:
typeMismatch (Swift.Int, Swift.DecodingError.Context (codingPath: [CodingKeys (stringValue: «данные», intValue: nil), CodingKeys (stringValue: «match», intValue: nil), _JSONKey (stringValue: «Index 0», intValue: 0), CodingKeys (stringValue: "time", intValue: nil)], debugDescription: "Ожидается декодирование Int, но вместо этого обнаружена строка / данные.", lowerError: nil))
Я новичок в JSON и Struct, поэтому не понимаю, что делаю не так. Я искал в Интернете похожие проблемы, но их решения, похоже, не помогли мне. Структура:
struct Data: Codable {
var data: Match
init(data: Match) {
self.data = data
}
}
struct Match: Codable {
var match: [Live_Match]
init(match: [Live_Match]) {
self.match = match
}
}
struct Live_Match: Codable {
let competition_id: Int?
let status: String?
let ht_score: String?
let ft_score: String?
let et_score: String?
let league_name: String?
let away_id: Int?
let score: String?
let competition_name: String?
let home_id: Int?
let away_name: String?
let time: Int?
let home_name: String?
let league_id: Int?
init(competition_id: Int?, status: String?, ht_score: String?, ft_score: String?, et_score: String?, league_name: String?, away_id: Int?, score: String?, competition_name: String?, home_id: Int?, away_name: String?, time: Int?, home_name: String?, league_id: Int?) {
self.competition_id = competition_id
self.status = status
self.ht_score = ht_score
self.ft_score = ft_score
self.et_score = et_score
self.league_name = league_name
self.away_id = away_id
self.score = score
self.competition_name = competition_name
self.home_id = home_id
self.away_name = away_name
self.time = time
self.home_name = home_name
self.league_id = league_id
}
}
Функция извлечения:
final let url_live = URL(string:"http://livescore-api.com/api-client/scores/live.json?key=6iNDEUYbh6NZHBdG&secret=RxkjBBp4h7MoKw2ROQvtLtE3zs2h4fXV&country=2")
private var Live_Matches = [Live_Match]()
func downloadJson() {
guard let downloadURL = url_live else { return }
URLSession.shared.dataTask(with: downloadURL) { data, urlResponse, error in
guard let data = data, error == nil, urlResponse != nil else {
print(error?.localizedDescription)
return
}
print("downloaded")
do
{
let decoder = JSONDecoder()
let downloadedLive_Matches = try decoder.decode(Data.self, from: data)
print(downloadedLive_Matches)
self.Live_Matches = downloadedLive_Matches.data.match
DispatchQueue.main.async {
self.tableView.reloadData()
}
} catch {
print(error.localizedDescription)
}
}.resume()
}
JSON:
{
"success": true,
"data": {
"match": [
{
"competition_id": 68,
"status": "HALF TIME BREAK",
"ht_score": "0 - 0",
"ft_score": "",
"et_score": "",
"last_changed": "2019-07-28 16:52:14",
"id": 151050,
"league_name": "First Division A",
"away_id": 806,
"score": "0 - 0",
"competition_name": "First Division A",
"events": false,
"home_id": 354,
"away_name": "Gent",
"added": "2019-07-28 15:45:20",
"time": "HT",
"home_name": "Sporting Charleroi",
"league_id": 48
}, //And some more data
]
}
}
print(error.localizedDescription)
вcatch
блокеprint(error)
. Настоящая ошибка сообщает вам, что именно не так и даже где. И не называйте свою структуруData
. В Foundation Framework есть структура с таким же именем. - person vadian   schedule 28.07.2019if let error = error { print(error)}
, чтобы получить более подробное сообщение об ошибке - person Joakim Danielson   schedule 28.07.2019