JSON в Swift Struct
Генерируйте Codable Swift-структуры из JSON. Бесплатно, в браузере.
Для чего это нужно
Из JSON в Swift Codable Struct
Готово для iOS и SwiftUI
Генерирует структуры, совместимые с URLSession, Alamofire, SwiftUI и Combine. Вставьте прямо в Xcode.
100% приватно
Ваш JSON из API не покидает браузер. Никакой регистрации и телеметрии.
Корректный Codable-код
Автоматические CodingKeys для snake_case, Optional для nullable-полей, правильные типы (Int, Double, Bool). Идиоматичный код.
Мгновенно
Структуры генерируются в реальном времени по мере ввода. Никаких кнопок и ожидания.
Как это работает
Три шага — никаких сложностей
Вставьте ваш JSON
Вставьте JSON из вашего API или веб-ответа. Работает с вложенными объектами, массивами и любой допустимой JSON-структурой.
Мгновенная генерация
Инструмент автоматически генерирует Swift-структуры, соответствующие протоколу Codable, с CodingKeys при необходимости.
Скопируйте код
Скопируйте сгенерированные структуры и используйте их непосредственно в вашем проекте iOS, macOS или SwiftUI.
FAQ
Остались вопросы?
Codable — псевдоним типа, введённый в Swift 4 (WWDC 2017), объединяющий два протокола: Encodable (может быть преобразован во внешний формат, например JSON) и Decodable (может быть создан из внешнего формата). Тип, соответствующий Codable, поддерживает как сериализацию, так и десериализацию. Соответствие достигается автоматически через синтез компилятора, если все свойства также соответствуют Codable.
Для JSON-моделей данных предпочтительны структуры по нескольким причинам: структуры являются типами-значениями (они копируются, а не ссылаются), что исключает проблемы общего состояния; компилятор может лучше оптимизировать их; в SwiftUI структуры лучше работают с реактивной моделью данных. Классы (ссылочные типы) уместны при необходимости наследования или идентификации объектов, но для API-моделей структуры — рекомендуемая практика.
CodingKeys — вложенный перечисляемый тип, сопоставляющий имена Swift-свойств с именами ключей в JSON. Необходим, когда имена JSON (как правило, snake_case в REST API) отличаются от соглашений Swift (camelCase). Например, если JSON содержит first_name, CodingKey сопоставляет этот ключ с полем firstName структуры. Без CodingKeys Swift ожидает, что имена в JSON точно совпадают с именами свойств.
В Swift Optional-тип (помечается ?) может иметь значение или быть nil. Когда поле JSON может отсутствовать или быть null, свойство структуры объявляется как Optional: var email: String? вместо var email: String. JSONDecoder из Foundation автоматически обрабатывает десериализацию: если ключ отсутствует в JSON или его значение null, свойству присваивается nil без возбуждения ошибки.
Типичный поток URLSession + Codable: URLSession.shared.dataTask возвращает Data; JSONDecoder().decode(MyStruct.self, from: data) преобразует Data в структуру; результат используется в UI на главном потоке. С Swift 5.5+ и async/await используйте let data = try await URLSession.shared.data(for: request), а затем let object = try JSONDecoder().decode(MyStruct.self, from: data). Этот паттерн лежит в основе всей интеграции API в современном iOS.
Swift для iOS/macOS, протокол Codable (2017) и интеграция API в SwiftUI
Swift был представлен Apple на WWDC 2014 как преемник Objective-C для разработки приложений под iOS, macOS, watchOS и tvOS. С введением Codable в Swift 4 (WWDC 2017) работа с JSON была кардинально упрощена. До Codable разработчики использовали сторонние библиотеки вроде SwiftyJSON или расширений Codable для Alamofire. Нативный Codable требует лишь JSONDecoder и типизированных структур без внешних зависимостей.
SwiftUI, представленный на WWDC 2019, укрепил использование структур в качестве моделей данных. Архитектура SwiftUI на основе типов-значений и протокола View как структуры идеально сочетается с Codable-моделями. Паттерны вроде MVVM в SwiftUI используют @Published в ObservableObject ViewModels с Codable-структурами в качестве моделей, создавая предсказуемый и тестируемый поток данных.
С Swift 5.5 (WWDC 2021) и введением async/await потребление REST API стало ещё чище. URLSession.shared.data(for:) теперь является async-функцией, устраняющей вложенные завершающие обработчики (callback hell). В сочетании с JSONDecoder полный паттерн fetch + decode занимает всего 3 строки кода. Данный инструмент генерирует Codable-структуры, необходимые для этого паттерна, обрабатывая всё в вашем браузере без отправки данных на серверы.