问题描述
我正在尝试抓取页面,找到他们的 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。