Как проверить файл JSON с помощью instanceof?

У меня есть этот json-файл со списком событий. Я хочу создать экземпляр этого файла JSON, чтобы проверить, есть ли какие-либо события, соответствующие классу вебинара, а затем показать его в DOM, но я получаю ошибки или вообще ничего, когда использую if или forEach.

events.json

[{
      "title": "Easter",
      "date": "4.5.2021",
      "time": "23:00 PM",
      "LiveEvent": {
        "location": "Ireland",
        "adress": "Centrul Vechi 21"
      },
      "party": {"theme" : " '70s "}
    },
    {
      "title": "Party",
      "date": "14.11.2025",
      "time": "2:00 PM",
      "webinar": {
        "webinarTitle": "Com",
        "webinarLink": "https://google.com"
      },
      "party": {"theme" : " '70s "}
    },
    {
      "title": "Birthday",
      "date": "30.11.2021",
      "time": "7:00 PM",
      "webinar": {
        "webinarTitle": "Drinks",
        "webinarLink": "https://drinks.com"
      },
      "LiveEvent": {
        "location": "Cluj",
        "adress": "Centrul Vechi 21"
      }
    }
]

Класс вебинара

class Webinar extends Event {
  constructor(title, time, date, webinarTitle, webinarLink){
      super(title, date, time)
      this.webinarTitle = webinarTitle
      this.webinarLink = webinarLink
  }

  show() {
      console.info("This " + this.webinarTitle + " webinar " + "is hosted on " + this.webinarLink)
  }
}
«Я хочу создать экземпляр этого файла JSON», не могли бы вы объяснить это поподробнее? Я полагаю, вы сначала разбираете JSON?
evolutionxbox 30.03.2021 14:00

да, я анализирую JSON с помощью запроса XHR, а затем я хочу сделать instanceof ответа, чтобы проверить, есть ли у событий свойство вебинара

Andrei Bucur 30.03.2021 14:02

Чего я не понимаю (это может быть моя собственная проблема), так это того, что означает «do a instanceof»? Не могли бы вы рассказать, как вы ожидаете, что это будет работать?

evolutionxbox 30.03.2021 14:03

я хочу проверить каждый объект, есть ли у него свойство веб-семинара, например if (events instanceof Webinar) {...}, но оно не работает

Andrei Bucur 30.03.2021 14:06

Ах, тогда нет. Разобранный JSON не становится экземпляром класса.

evolutionxbox 30.03.2021 14:07
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
5
28
1

Ответы 1

JSON - это средство сериализации подходящих значений JavaScript (применяются ограничения) в текст и обращения процесса путем анализа текста для воссоздания сериализованного значения. JSON не сериализует класс объекта.

Также JSON сериализует только собственные свойства - ничего в цепочке прототипов объекта не преобразуется в текст.

Короткий ответ - попытка использовать instanceOf для анализируемых значений объекта JSON неэффективна: любые проанализированные значения объекта являются экземплярами Object и ничего больше.


Возможное решение

Частично проблема может заключаться в том, что код class Webinar не соответствует опубликованному JSON. Пытаться

class Webinar extends Event {
  constructor(title, time, date, webinarTitle, webinarLink){
      super(title, date, time)
      this.webinar = {webinarTitle, webinarLink};  // object property
  }

  show() {
      console.info("This " + this.webinar.webinarTitle + " webinar " + "is hosted on " + this.webinar.webinarLink)
  }
}

для расширения Event, а затем после кодирования и декодирования JSON проверьте, был ли он изначально объектом Webinar, проверив, есть ли у него свойство webinar:

if ( event.webinar) {
   // yes it WAS a Webinar object...
}

И наконец, JSON не сериализует функциональные объекты: декодированный объект Webinar будет обычным объектом с методами, унаследованными от Object.prototype. Никакие оригинальные методы, такие как show, не будут присутствовать в декодированных объектах.

Другие вопросы по теме