Как преобразовать JSON в модель?

Ссылка скопирована
1 ответ

Есть 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 и подумайте имеет ли он отношение к вопросу.

  • DevMan, Вы правы, это лишнее.
  • trainInfo является массивом, а не объектом.
    И стоит обратить внимание на ответ Дмитрий Данилин

    • Спасибо

    Ответы:

    поле exerciseImage – это тип String. В URL его можно преобразовать уже позже. У JSON в принципе не существует такого типа как URL.

    • Это ладно, спасибо за поправку. Суть проблемы, что значения trainDay и nameOfMuscle выводятся, но если пытаюсь провалиться в значения trainInfo - ошибка.
    • А это как раз решается, как описали ниже, trainInfo это массив объектов. В модели данных нужно указать это как let trainInfo: [TrainInfo]
    • Дмитрий Данилин, Благодарю
    Нужно решить такую задачу?

    Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

    Заказать помощь
    Лучший ответ
    1
    Виктор Sys Ответ

    Для преобразования 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 строка $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.

    Другие ответы (0)

    Пока нет других ответов. Будьте первым, кто поможет автору.

    Ответить на вопрос

    комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *

    Вам также может быть интересно