Как преобразовать JSON в модель?
Есть JSON в таком виде:
{ "trainDay": "1 DAY:", "nameOfMuscle": "Chest and Triceps", "trainInfo": [ { "exerciseImage": "https://www.got-big.de/Blog/wp-content/uploads/2017/04/Bankdruecken-Bench-Press.jpg", "exerciseName": "Bench Press", "numberOfSets": "4-5", "numberOfRepeats": "8-12", "restTime": "120-180" }, { "exerciseImage": "https://i.ytimg.com/vi/0aZS8czIj1I/maxresdefault.jpg", "exerciseName": "Incline Bench Press", "numberOfSets": "3-4", "numberOfRepeats": "8-12", "restTime": "120-180" }, { "exerciseImage": "https://i.ytimg.com/vi/3-ZigiOoU3o/maxresdefault.jpg", "exerciseName": "Inclined Dumbbell Press", "numberOfSets": "3-4", "numberOfRepeats": "8-12", "restTime": "120-180" }, { "exerciseImage": "https://crossi.ru/wp-content/uploads/1/1/0/1101845a533f9f59ba26d48d2779059f.jpeg", "exerciseName": "Overhead Burbel Extension", "numberOfSets": "3-4", "numberOfRepeats": "8-12", "restTime": "60-120" }, { "exerciseImage": "https://homegymreview.co.uk/wp-content/uploads/exercises/02001101-Cable-Pushdown-with-rope-attachment_Upper-Arms_max-scaled.jpg", "exerciseName": "Rope Pushdown", "numberOfSets": "3-4", "numberOfRepeats": "8-12", "restTime": "60-120" } ] } |
{ "trainDay": "1 DAY:", "nameOfMuscle": "Chest and Triceps", "trainInfo": [ { "exerciseImage": "https://www.got-big.de/Blog/wp-content/uploads/2017/04/Bankdruecken-Bench-Press.jpg", "exerciseName": "Bench Press", "numberOfSets": "4-5", "numberOfRepeats": "8-12", "restTime": "120-180" }, { "exerciseImage": "https://i.ytimg.com/vi/0aZS8czIj1I/maxresdefault.jpg", "exerciseName": "Incline Bench Press", "numberOfSets": "3-4", "numberOfRepeats": "8-12", "restTime": "120-180" }, { "exerciseImage": "https://i.ytimg.com/vi/3-ZigiOoU3o/maxresdefault.jpg", "exerciseName": "Inclined Dumbbell Press", "numberOfSets": "3-4", "numberOfRepeats": "8-12", "restTime": "120-180" }, { "exerciseImage": "https://crossi.ru/wp-content/uploads/1/1/0/1101845a533f9f59ba26d48d2779059f.jpeg", "exerciseName": "Overhead Burbel Extension", "numberOfSets": "3-4", "numberOfRepeats": "8-12", "restTime": "60-120" }, { "exerciseImage": "https://homegymreview.co.uk/wp-content/uploads/exercises/02001101-Cable-Pushdown-with-rope-attachment_Upper-Arms_max-scaled.jpg", "exerciseName": "Rope Pushdown", "numberOfSets": "3-4", "numberOfRepeats": "8-12", "restTime": "60-120" } ] }
Моя модель выглядит так, но при выводе результата улетает в ошибку
struct NoteExercise: Decodable { let trainDay: String let nameOfMuscle: String let trainInfo: TrainInfo } struct TrainInfo: Decodable { let exerciseImage: URL let exerciseName: String let numberOfSets: String let numberOfRepeats: String let restTime: String } |
struct NoteExercise: Decodable { let trainDay: String let nameOfMuscle: String let trainInfo: TrainInfo } struct TrainInfo: Decodable { let exerciseImage: URL let exerciseName: String let numberOfSets: String let numberOfRepeats: String let restTime: String }
В онлайн сервисе JSON парсится.
Дополнительно:
Mkdnc прочитайте описание тега UIKit и подумайте имеет ли он отношение к вопросу.
trainInfo является массивом, а не объектом.
И стоит обратить внимание на ответ Дмитрий Данилин
- Спасибо
Ответы:
поле exerciseImage – это тип String. В URL его можно преобразовать уже позже. У JSON в принципе не существует такого типа как URL.
- Это ладно, спасибо за поправку. Суть проблемы, что значения trainDay и nameOfMuscle выводятся, но если пытаюсь провалиться в значения trainInfo - ошибка.
- А это как раз решается, как описали ниже, trainInfo это массив объектов. В модели данных нужно указать это как let trainInfo: [TrainInfo]
- Дмитрий Данилин, Благодарю
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
Для преобразования JSON в модель в языке программирования PHP, вам необходимо сначала десериализовать JSON-строку в ассоциативный массив с помощью функции json_decode(). Затем вы можете создать объект вашей модели и заполнить его данными из этого массива.
Пример:
// JSON строка $jsonString = '{"name": "John", "age": 30, "city": "New York"}'; // Десериализация JSON в ассоциативный массив $data = json_decode($jsonString, true); // Создание объекта модели class Person { public $name; public $age; public $city; public function __construct($name, $age, $city) { $this->name = $name; $this->age = $age; $this->city = $city; } } // Заполнение объекта модели данными из массива $person = new Person($data['name'], $data['age'], $data['city']);
В этом примере мы сначала десериализуем JSON-строку в массив $data с помощью json_decode(). Затем мы создаем класс Person c тремя свойствами (name, age, city) и конструктором, который заполняет эти свойства значениями из массива $data. Теперь у нас есть объект $person, который представляет модель на основе данных из JSON.