微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用 instanceof 检查 JSON 文件?

如何解决如何使用 instanceof 检查 JSON 文件?

我有一个带有事件列表的 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"
      },{
      "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,time)
      this.webinarTitle = webinarTitle
      this.webinarLink = webinarLink
  }

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

解决方法

JSON 是一种将合适的 JavaScript 值(适用限制)序列化为文本并通过解析文本以重新创建序列化值来反转该过程的方法。 JSON 不会序列化对象的类。

此外,JSON 仅序列化自己的属性 - 对象原型链中的任何内容都不会转换为文本。

简短的回答是试图在解析的 JSON 对象值上使用 instanceOf 是无效的:任何解析的对象值都是 Object 的实例,没有别的。


可能的解决方案

部分问题可能是 class Webinar 代码与发布的 JSON 不匹配。试试

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

  show() {
      console.log("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 之类的原始方法。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。