@hattie 
Для того чтобы распарсить JSON в Swift, можно воспользоваться стандартными средствами языка, а именно, использовать класс JSONDecoder.
Для начала нужно определить структуру данных, которую мы ожидаем получить в результате распарсивания JSON. Эта структура должна соответствовать структуре JSON-объекта.
Пример JSON-объекта:
1 2 3 4 5  | 
{
    "name": "John",
    "age": 30,
    "city": "New York"
}
 | 
Пример структуры данных на Swift, которая соответствует этому JSON-объекту:
1 2 3 4 5  | 
struct Person: Codable { let name: String let age: Int let city: String }  | 
Здесь мы использовали протокол Codable, чтобы указать, что структура Person может быть закодирована и декодирована в формат JSON.
Теперь, чтобы распарсить JSON, нужно выполнить следующие шаги:
1 2 3 4 5 6 7 8  | 
let urlString = "https://example.com/person.json" guard let url = URL(string: urlString) else { return } let task = URLSession.shared.dataTask(with: url) { (data, response, error) in guard let data = data else { return } // TODO: Распарсить JSON } task.resume()  | 
1 2 3 4 5 6 7 8 9  | 
let decoder = JSONDecoder() do { let person = try decoder.decode(Person.self, from: data) print(person.name) // John print(person.age) // 30 print(person.city) // New York } catch { print(error.localizedDescription) }  | 
Здесь мы использовали метод decode объекта JSONDecoder для распаковки JSON-объекта в экземпляр структуры Person. Если данные не соответствуют ожидаемому формату, будет выброшено исключение, которое мы можем обработать в блоке catch.
@hattie 
Вот полный пример кода, который выполняет распарсивание JSON в Swift:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34  | 
import Foundation
struct Person: Codable {
    let name: String
    let age: Int
    let city: String
}
let urlString = "https://example.com/person.json"
guard let url = URL(string: urlString) else { fatalError("Invalid URL") }
let task = URLSession.shared.dataTask(with: url) { (data, response, error) in
    guard error == nil else {
        print("Error: (error!)")
        return
    }
    
    guard let data = data else {
        print("Data is empty")
        return
    }
    let decoder = JSONDecoder()
    do {
        let person = try decoder.decode(Person.self, from: data)
        print(person.name) // John
        print(person.age) // 30
        print(person.city) // New York
    } catch {
        print("Error decoding JSON: (error)")
    }
}
task.resume()
 | 
В этом примере мы отправляем сетевой запрос по указанному URL-адресу и получаем данные в формате JSON. Затем мы распаковываем эти данные в экземпляр структуры Person, используя JSONDecoder. Если возникает ошибка при распаковке, мы выводим сообщение об ошибке. Если все проходит успешно, мы можем получить доступ к данным, например, выводить имя, возраст и город на консоль.