以下是我正在尝试的两个示例查询(在应用程序中我使用JSON作为输出数据,但这有助于格式化):
强制失败:Gibberish
运行它会拉回数据,我知道我正在寻找的区域是jObject [“query”] [“pages”]。所以我注意到在失败时,页面名称/属性/无论是“-1”并查询有效的内容都会为您提供该主题的唯一ID。
这是我目前的代码:
JObject excerpt = JObject.Parse(reader.ReadToEnd());
if ((string) excerpt["query"]["pages"] == "-1")
return null;
result.Excerpt = (string)excerpt["query"]["pages"]["extract"];
它在if检查上失败了,我很确定它最终也会在摘录中失败。
如何检查“页面”中的项目,看它是否被称为“-1”?
如何在不事先知道页面的pageid的情况下进入成功查询的项目?
答案 0 :(得分:1)
如果您在JSON.NET中有JSON字典,则可以将其视为属性集合(JProperty
)。并且您可以在该集合上使用LINQ方法Single()
来从中获取唯一的属性。我认为检查页面是否实际丢失的更好方法是检查其missing
属性(或者,检查它是否具有excerpt
)。整个代码看起来像这样:
private static string GetExtract(string json)
{
var excerpt = JObject.Parse(json);
var pageProperty = (JProperty)excerpt["query"]["pages"].Single();
var page = (JObject)pageProperty.Value;
if (page["missing"] != null)
return null;
return (string)page["extract"];
}
但就个人而言,我喜欢在这种情况下使用XML而不是JSON。使用XML,该方法看起来会像(它比JSON版本更长,但它也更简单,我认为这是一个加号):
private static string GetExtractXml(string xml)
{
var document = XDocument.Parse(xml);
var page = document
.Element("api")
.Element("query")
.Element("pages")
.Elements("page")
.Single();
if (page.Attribute("missing") != null)
return null;
return (string)page.Element("extract");
}