Парсинг JSON - одна из самых распространенных вещей, которые мы собираемся делать, как разработчики мобильных приложений, поэтому важно знать, как это делать. С появлением Swift 5 синтаксический анализ JSON стал намного проще, чем раньше, поэтому мы собираемся использовать API новостей, чтобы показать, как это сделать.

Чтобы иметь возможность вызывать API для данных JSON, вам необходимо зарегистрироваться на сайте News API и получить свой ключ.

Объекты JSON представлены парами ключ: значение, и обычно существует более одной пары ключ: значение. На рисунке ниже между квадратными скобками status, totalResults, статьи представляют ключи, с другой стороны «ok», 3189, […] представляют значения для соответствующих ключей. Например, статус: «ОК» - это одна пара ключ: значение. Важно знать, что value может содержать другую пару ключ: значение внутри, а в данном случае ключевые статьи: содержать в качестве значения другую пару ключ: значение.

Чтобы очень легко разобрать JSON на пригодные для использования экземпляры Struct или Class, которые мы создаем в Swift, мы используем протокол Codable. Итак, как это работает?
В основном мы сопоставляем объекты JSON со структурами или классами, которые мы создаем в Swift, и для каждого из этих классов он будет представлять разные объекты JSON.

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

После того, как мы создали наши файлы .swift в папке Models, мы снова посмотрим, как выглядит наш ответ API.

Итак, на основе нашего ответа API мы собираемся сопоставить наши структуры .swift. Очень важно использовать то же имя, что и в нашем ответе API, чтобы синтаксический анализ мог быть успешным, а также каждая структура должна соответствовать протоколу Codable.

Первым, что мы собираемся сопоставить, является NewsFeed.swift, который содержит 3 пары ключ: значение, как и наш ответ API.

Ключевые статьи, поскольку его значение содержит еще один набор пар ключ-значение, и мы собираемся отобразить его также в файл .swift Article.swift

На основе ответа API мы сопоставили другой Struct. Внутри статьи есть ключ, который в качестве своего значения содержит другой набор значений пары ключ: пара, называемый источником. Как и раньше, мы собираемся сопоставить Source с нашей Swift Struct.

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

После того, как мы сопоставили ответ JSON с Swift Structs, мы собираемся декодировать JSON в нашу Swift Struct.

Мы собираемся декодировать JSON в нашем ViewController.swift.

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

Следующее, что нужно сделать, это присвоить объекту URL значение urlString и проверить, равен ли наш объект URL нулю.

После проверки нашего объекта URL мы создаем URLSession и dataTask, которые, как вы можете видеть, содержат закрытие.

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

В decoder.decode () в качестве параметра типа мы предоставляем NewsFeed.self в качестве структуры верхнего уровня и декодируем ее из данных.

Чтобы запустить dataTask, вам нужно вызвать dataTask.resume ()

Теперь вы можете запустить приложение и увидеть ответ JSON в консоли!