Object, array, string
Скачать 20.1 Kb.
|
Что такое JSON? JSON , также известный как нотация объектов JavaScript, представляет собой облегченный формат данных. Он работает в парах ключ-значение и принимает только определенные типы значений: object , array , string , number , boolean , null . Вот простой пример того, как выглядит JSON: { "name": "John", "age": 30, "car": null } Создайте свою модель Давайте начнем с создания нашей модели в нашем приложении. В качестве примера мы будем использовать модель Animal . Каждое животное будет иметь идентификатор, имя, возраст и тип. // Animal.swift struct Animal: Identifiable, Decodable { var id: Int var name: String var age: Int var type: String } Создайте файл JSON с данными Затем создайте файл JSON в соответствии с только что созданной моделью. Поскольку мы хотим отображать в нашем приложении несколько животных, наш JSON будет массивом Animals . // animalData.json [ { "id": 1001, "name": "Toto", "age": 3, "type": "Dog" }, { "id": 1002, "name": "Betsy", "age": 7, "type": "Cat" }, { "id": 1003, "name": "Olive", "age": 36, "type": "Tortoise" }, { "id": 1004, "name": "Jupiter", "age": 10, "type": "Parrot" }, { "id": 1005, "name": "Ulysse", "age": 17, "type": "Monkey" } ] Примечание. Не забудьте проверить данные JSON, так как вы можете получить ошибки при декодировании данных. Вы можете использовать JSONLint , чтобы проверить, действителен ли ваш JSON. Создайте свои данные модели Далее давайте создадим ModelData , куда мы будем загружать и анализировать данные JSON в нашем приложении. // ModelData.swift var animals: [Animal] = load("animalData.json") func load<T: Decodable>(_ filename: String) -> T { let data: Data guard let file = Bundle.main.url(forResource: filename, withExtension: nil) else { fatalError("Couldn't find \(filename) in main bundle.") } do { data = try Data(contentsOf: file) } catch { fatalError("Couldn't load \(filename) from main bundle:\n\(error)") } do { let decoder = JSONDecoder() return try decoder.decode(T.self, from: data) } catch { fatalError("Couldn't parse \(filename) as \(T.self):\n\(error)") } } Приведенная выше функция load() берет файл из пути к файлу, который вы передали в качестве аргумента, и декодирует данные JSON в формат, который может прочитать Swift. Если есть ошибка, она будет напечатана в консоли. После того, как функция загрузки будет завершена, ваши данные будут доступны и готовы к использованию, просто вызвав переменную animals . Важно указать тип данных, которые вы хотите сохранить, в переменной animals , так как функция load() должна знать, какой тип данных она должна выводить. Используйте свои данные в своем представлении Вам просто нужно вызвать переменную животных и выполнить итерацию по каждому животному, чтобы отобразить их в своем представлении. var body: some View { VStack { ForEach(animals) { animal in Text("\(animal.name) is a \(animal.type) and is \(animal.age) years old.") } } } |