从网页反序列化 JSON - 总是错误的语法?

问题描述

我正在尝试抓取页面,找到他们的 schema.org 脚本,然后对其进行反序列化。

我能够找到脚本,但是,在大多数 Json 验证器工具中,有效的 JSON 模式(根据 Google/schema.org)据说是无效的。

例如,这是我的代码

    string Url = "https://www.independent.co.uk/news/health/nhs-pay-health-coronavirus-unions-b1812659.html";
    HtmlWeb web = new HtmlWeb();
    HtmlDocument doc = web.Load(Url);
    var scripts = doc.DocumentNode.SelectNodes("//script");
    foreach (HtmlNode node in scripts)
    {
        string value = node.InnerText;
        if (value.Contains("schema.org"))
        {
            dynamic results = JsonConvert.DeserializeObject<dynamic>(value);
            var name = results.name;
        }
    }

找到以下架构(JSON)

{{
  "@type": "Organization","@context": "https://schema.org","name": "The Independent","url": "https://www.independent.co.uk","logo": {
    "@type": "ImageObject","url": "https://www.independent.co.uk/img/logo.png","width": 504,"height": 60
  },"sameAs": [
    "https://twitter.com/Independent","https://www.facebook.com/TheIndependentOnline"
  ]
}}

#1 JSON 应该是无效的,即使每个使用结构化数据的网站都这样使用它

#2 当我尝试获取 name 值时,它返回 null。

我认为我的问题是因为 JSON 无效。我如何使这项工作?我没有想法了。

解决方法

您需要去掉 JSON 开头和结尾的多余大括号,以使其成为有效的 JSON。