【发布时间】:2021-03-05 11:50:33
【问题描述】:
我正在尝试抓取页面,找到它们的 schema.org 脚本,然后对其进行反序列化。
我能够找到脚本,但是,有效的 JSON 架构(根据 Google/schema.org)在大多数 Json Validator 工具中应该是无效的。
例如,这是我的代码
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;
}
}
找到以下 Schema (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 当我尝试获取名称值时,它返回 null。
我认为我的问题是因为 JSON 无效。我该如何进行这项工作?我没有想法。
【问题讨论】:
-
这里的问题是对象周围的额外花括号。 Json 对象需要具有属性,如果您的对象中嵌套了另一个对象,则它不是有效的 json,如下所示:
{ }是一个有效的空 json 对象。但是,这无效:{{ }}.
标签: c# json .net json-deserialization