Как распарсить json в swift?

Пользователь

от hattie , в категории: Swift , 2 года назад

Как распарсить json в swift?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от lamar , 2 года назад

@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. Получить данные в формате 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. Распарсить данные в структуру данных с помощью JSONDecoder.
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.

Пользователь

от carlo.cummerata , год назад

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