Кодирование JSON с преобразованием snake_case игнорирует CodingKeys - PullRequest
0 голосов
/ 25 апреля 2019

У меня есть следующая структура, которую я отправляю в конечную точку:

struct IdleAlarmRequest: Encodable {
    let idleAlarm: [IdleAlarmParameters]

    enum CodingKeys: String, CodingKey {
        case idleAlarm = "IdleAlarm"
    }
}

Независимо от того, что я делаю idleAlarm всегда будет записываться как idle_alarm в результирующей строке JSON. Это должно быть IdleAlarm, так как "объекты" являются PascalCased с этим API, только поля должны быть snake_cased. Decodable отлично работает.

Все остальные поля во всех объектах имеют snake_cased, поэтому, если я не использую snake_case, мне нужно добавить CodingKeys для сотен полей.

1 Ответ

1 голос
/ 25 апреля 2019

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

Но я полагаю, вы кодируете свою структуру следующим образом:

let request = IdleAlarmRequest(...)

let encoder = JSONEncoder()
encoder.keyEncodingStrategy = .convertToSnakeCase
do {
    let data = try encoder.encode(request)
}
catch {

}

Стратегия convertToSnakeCase конвертирует ваши ключи кодирования из случая верблюда в случай змеи.

Если вы не хотите этого поведения, вы можете удалить строку.

РЕДАКТИРОВАТЬ: Вы можете создать собственную стратегию кодирования ключа.

encoder.keyEncodingStrategy = .custom { key -> CodingKey in
    // Your own code...
}
...