@sylvester
Работа с Codable
и JSON в Swift является важной частью для преобразования данных между форматом JSON и моделями Swift. Codable
— это протокол, который объединяет Encodable
и Decodable
протоколы и позволяет легко сериализовать и десериализовать данные. Вот базовое руководство, как это сделать:
Для начала, определите свои модели данных, которые соответствуют структуре JSON. В идеальном случае, структура вашего JSON должна совпадать со структурой ваших моделей данных.
1 2 3 4 5 6 7 |
import Foundation struct User: Codable { let id: Int let name: String let email: String } |
Здесь User
— это простая структура, соответствующая JSON, содержащему идентификатор пользователя, имя и email.
Допустим, у вас есть JSON-данные, которые вы хотите декодировать в модель User
. Вы можете использовать JSONDecoder
для этого:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
let jsonData = """ { "id": 1, "name": "John Doe", "email": "johndoe@example.com" } """.data(using: .utf8)! do { let user = try JSONDecoder().decode(User.self, from: jsonData) print("ID: (user.id), Name: (user.name), Email: (user.email)") } catch { print("Error decoding JSON: (error)") } |
Вы также можете преобразовать объекты Swift обратно в JSON с помощью JSONEncoder
:
1 2 3 4 5 6 7 8 9 10 |
let user = User(id: 1, name: "John Doe", email: "johndoe@example.com") do { let jsonData = try JSONEncoder().encode(user) if let jsonString = String(data: jsonData, encoding: .utf8) { print(jsonString) } } catch { print("Error encoding JSON: (error)") } |
Если у вас более сложный JSON с вложенными структурами, вы можете использовать вложенные структуры Swift. Например:
1 2 3 4 5 6 7 8 9 10 11 |
struct Address: Codable { let street: String let city: String } struct User: Codable { let id: Int let name: String let email: String let address: Address } |
JSON для вышеупомянутой структуры:
1 2 3 4 5 6 7 8 9 |
{ "id": 1, "name": "John Doe", "email": "johndoe@example.com", "address": { "street": "123 Main St", "city": "Anytown" } } |
JSONEncoder
и JSONDecoder
имеют различные параметры конфигурации, такие как dateEncodingStrategy
и keyDecodingStrategy
, чтобы справляться с разными форматами дат и ключей.
Например, чтобы использовать стиль форматирования дат ISO 8601:
1 2 |
let decoder = JSONDecoder() decoder.dateDecodingStrategy = .iso8601 |
Работа с Codable
очень упрощает сериализацию и десериализацию JSON в Swift. Это встроенный механизм, который делает код более чистым и легко управляемым. Важно, чтобы структура данных в Swift совпадала со структурой JSON для успешного кодирования и декодирования.