@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. Если возникает ошибка при распаковке, мы выводим сообщение об ошибке. Если все проходит успешно, мы можем получить доступ к данным, например, выводить имя, возраст и город на консоль.