c#提取JSON数据



从Wikipedia获取数据的代码:

string URL = $"https://en.wikipedia.org/w/api.php?action=query&format=json&list=&titles={query}&redirects=1";
WebRequest wrREQUEST;
wrREQUEST = WebRequest.Create(URL);
wrREQUEST.Proxy = null;
wrREQUEST.Method = "GET";
WebResponse response = wrREQUEST.GetResponse();
StreamReader streamReader = new StreamReader(response.GetResponseStream());
string responseData = streamReader.ReadToEnd();
JObject jsonData = JObject.Parse(responseData);
var jsonQuery = jsonData["query"];
string pageID = (string)jsonQuery;

但是我一直得到

抛出异常:'System. 'Newtonsoft.Json.dll中的ArgumentException

和json数据看起来像这样:

{
"batchcomplete":"",
"query":{
"pages":{
"31717":{
"pageid":31717,
"ns":0,
"title":"United Kingdom"
}
}
}
}

我还想知道,由于"pages":{"31717":{}}是一个我事先不知道的ID,我如何通过枚举数据得到31717?

错误是因为您试图显式地将JObject转换为string,这是不可能使用转换的,只能使用序列化。

但我知道你实际上想要的是"PageId",从json结构来看,你需要取"第一个键"从回应来看。(其实还有更多的方法)

所以不用

string pageID = (string)jsonQuery;

一种可能的方法是使用

((JProperty)jsonQuery["pages"].First()).Name

请找到您的请求的解决方案,可能有些时候您将无法获得第一个元素值,这将触发一些异常。

请换行:

string pageID = (string)jsonQuery;

**var jToken = jsonQuery["pages"].First;
if (jToken != null)
{
string pageID = ((JProperty) jToken).Name;
}**

最新更新