Как использовать вложенный JSON со структурами в Swift - PullRequest
0 голосов
/ 06 октября 2018

У меня есть API, и мне нужно позвонить, чтобы получить список праздников с дополнительной информацией вместе с ним.Ссылка моего API - http://mahindralylf.com/apiv1/getholidays

Структура, которую я создал с помощью веб-сайта app.quicktype.io

struct Holiday: Codable {
    let responseCode, responseMsg: String
    let holidayCount: Int
    let holidays: [HolidayElement]

enum CodingKeys: String, CodingKey {
    case responseCode = "response_code"
    case responseMsg = "response_msg"
    case holidayCount = "holiday_count"
    case holidays
    }
}
struct HolidayElement: Codable {
    let month: String
    let image: String
    let details: [Detail]
}
struct Detail: Codable {
    let title, date, day: String
    let color: Color
}
enum Color: String, Codable {
    case b297Fe = "#B297FE"
    case e73838 = "#E73838"
    case the0D8464 = "#0D8464"
}

Я могу добраться до объекта "Праздник", распечатать его, отобразитьмой tableViewCells с цветом для "holidayCount".То, что я хочу сделать, это без использования обычного json анализа и создания моих собственных массивов и диктов, чтобы получить доступ к «Detail» для каждого «праздника».

tl; dr - Iнужно знать, как получить доступ к деталям для элемента праздников

Спасибо !!

1 Ответ

0 голосов
/ 06 октября 2018

Ваши данные возвращаются с массивом HolidayElements, а у каждого HolidayElement есть массив Details.

Так что для каждого HolidayElement вы хотите получить доступ к details массив.Вы бы сделали это так:

let jsonResponse = try JSONDecoder().decode(Holiday.self, from: responseData)
print(jsonResponse.holidays[0].details)

Вот репо для игры с .

Кроме того, ваши ключи кодирования просто конвертируются из snake_case,так что они вам на самом деле не нужны для этой конечной точки.Вместо этого вы можете просто указать декодеру convertFromSnakeCase

В этом случае вы можете отказаться от кодирования и просто декодировать следующим образом:

let decoder = JSONDecoder()
decoder.keyDecodingStrategy = .convertFromSnakeCase
let jsonResponse = try decoder.decode(Holiday.self, from: responseData)
print(jsonResponse.holidays[0].details)
...