У меня есть следующий объект JSON, который нужно преобразовать в объект, используя JSONDecoder
:
{
"first_key": 3,
"image_1000x1000": "location"
}
Это соответствует следующей модели Swift:
struct Response: Decodable {
var firstKey: Int
var image1000x1000: String
}
Используя JSONDecoder
с опцией .convertFromSnakeCase
, ключи snake_case внутри JSON преобразуются в camelCase с использованием алгоритма, определенного в документации :
Эта стратегия следует за этими шагами, чтобы преобразовать ключи JSON в случай верблюда:
Прописать каждое слово, которое следует за подчеркиванием.
Удалить все подчеркивания, которые не находятся в самом начале или конце строки.
Объедините слова в одну строку.
Следовательно, в данном случае:
first_key
становится firstKey
(как и ожидалось)
image_1000x1000
должно стать image1000x1000
Однако при попытке декодировать этот ответ выдается ошибка keyNotFound
для клавиши image1000x1000
( см. Этот живой пример ):
let json = "{\"first_key\": 3, \"image_1000x1000\": \"location\"}".data(using: .utf8)!
do {
let decoder = JSONDecoder()
decoder.keyDecodingStrategy = .convertFromSnakeCase
let response = try decoder.decode(Response.self, from: json)
print(response)
} catch let e {
print(e)
}
Что неверного в моем преобразовании верблюжьего корпуса в image_1000x1000
, и почему JSONDecoder
не может найти соответствующий ключ?