JSON - ›Swift

Codable - одна из тех замечательных функций, которые не должны ускользать от внимания любого начинающего разработчика в экосистеме Swift.

Сложность: Начинающий | Легко | Нормальный | Испытывающий

Предпосылки:

Терминология

Codable: псевдоним типа для Decodable & Encodable, который позволяет легко преобразовывать в сериализованный формат или из него (например, JSON).

JSON: JavaScript Object Notation, легкий формат для хранения и передачи данных.

Реализация: кодируемая

Типичное приложение берет данные из конечной точки и декодирует их в модель Swift. Поскольку structs обычно представляют данные и являются типами значений, они подходят для моделей (более class, хотя вам нужно принять собственное решение по этому поводу).

Этот пользовательский режим соответствует протоколу Codable. Это означает, что мы можем выбрать либо кодирование, либо декодирование в (из) модели Swift UserModel.

Мы можем закодировать это с помощью следующей функции:

Затем мы можем декодировать модель пользователя:

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

Это не всегда возможно в реальной жизни: серверная модель может не точно соответствовать struct.

Реализация: кодируемый snake_case

На самом деле нам не следует использовать snake_case в коде Swift, но ваш бэкэнд-разработчик (это ведь не вы?) Считает, что это отличная идея.

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

Это было бы замечательно.

Это можно сделать, слегка подтолкнув “user_Id”: 1 к userId.

Затем мы можем добавить следующую строку сразу после объявления декодера (это let decoder = JSONDecoder())

decoder.keyDecodingStrategy = .convertFromSnakeCase

Реализация: несовпадающие имена ключей

У нас может быть строка JSON, детализированная следующим образом:

let data = “””
{
“idforuser”: 1,
“globalid”: 2,
“usertitle”: “test”,
“complete”: true
}
“””

Я решил записать это в расширение, которое представляет собой перечисление CodingKeys (которое представляет собой перечисление, которое использует строки для необработанного значения)

Реализация: вложенный JSON

которому тогда нужна немного другая модель; то есть тот, который может быть объединен с другим Struct:

После этого к владельцу можно будет получить доступ через content.owner.name или content.owner.age.

Анализ данных с использованием кодирования

Если вам нужно преобразовать дату из JSON в вашу модель структуры, декодер поможет вам

Можно ожидать, что вы будете использовать формат ISO8601 при обработке дат (и вам следует сделать это).

let decoder = JSONDecoder()
decoder.dateDecodingStrategy = .iso8601

и на самом деле вы даже можете использовать пользовательские форматы, как со стандартным форматером даты

let readableDateFormatter = DateFormatter()
readableDateFormatter.dateFormat = "M-dd-yyyy HH:mm"
let decoder = JSONDecoder()
decoder.dateDecodingStrategy = .formatted(formatter)

dateDecodingStrategy может даже обработать закрытие с помощью пользовательской функции.

Вывод:

Послушайте, в мире разработки программного обеспечения есть одна вещь, которую вам, вероятно, придется делать неоднократно. То есть вам нужно будет преобразовать данные JSON в объекты Swift.

Codable поможет вам в этом!

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

Расширьте свои знания

Контактное лицо в Twitter:

Любые вопросы? Вы можете связаться со мной ЗДЕСЬ