Swift: Из структуры в JSON без Codable

Всем привет! Сторонняя сдк десереализует json, приходящий c сервера, в структуру, которая подписана под Decodable, а мне нужно наоборот, из нее получить json строку. Подписать сдкашную структуру под Codable, понятное дело, я не могу

    struct User: Decodable {
    let id: String
    let name: String
    let verification: Sdk.VerificationType 
}

print(user)

// User(id: "12345", name: "Max", verification: Sdk.User.VerificationType.notRequired)

Есть варианты, как из этого получить json?


Ответы (1 шт):

Автор решения: VAndrJ

Подписать нет. Но что есть Codable? Это Decodable и Encodable. Так что можно её просто расширить:

extension User: Encodable {}

И загонять в JSONEncoder.


Расширенный пример:

extension User: Encodable {
    enum CodingKeys: String, CodingKey {
        case id
        case name
        case verification = "sdk_verification_type" //для примера
    }
    
    func encode(to encoder: Encoder) throws {
        var container = encoder.container(keyedBy: CodingKeys.self)
        try container.encode(id, forKey: .id)
        try container.encode(name, forKey: .name)
        try container.encode(verification, forKey: .verification) // Для Sdk.VerificationType в зависимости от надобности свой Encodable/конвертацию в другой формат
    }
}
→ Ссылка