从维基百科API获取JSON数据并提取title字段,代码报错求助
解决维基API获取动态pageid下的Title问题
嘿,我明白你遇到的问题了!你想用[0]来直接访问pages里的内容,但其实维基API返回的pages是一个键为动态pageid的对象,不是数组,所以数字索引[0]根本不起作用,这就是代码报错的原因。
问题根源
你调用的API返回的JSON结构大概是这样的(简化版):
{ "query": { "pages": { "3463766": { "title": "United States", ... } } } }
看到没?pages下面不是数组,而是一个以pageid为键的对象,所以你没法用[0]来访问它的子元素。
修正后的代码
我们可以通过获取pages对象的第一个属性值来拿到对应的页面数据,不管pageid是什么:
using System.Linq; // 别忘了引用Linq,因为用到了First() using System.Net; using Newtonsoft.Json.Linq; string fileDownload; using (WebClient client = new WebClient()) { fileDownload = client.DownloadString("https://en.wikipedia.org/w/api.php?format=json&action=query&prop=extracts&titles=usa&redirects=true"); } JObject sa = JObject.Parse(fileDownload); // 获取pages对象 JObject pages = (JObject)sa["query"]["pages"]; // 取pages里的第一个页面数据(因为你只查询了一个title,所以只会有一个) JToken targetPage = pages.Properties().First().Value; // 提取title string sq = targetPage["title"].ToString();
关键解释
pages.Properties()会返回pages对象的所有属性(也就是各个pageid对应的页面条目).First()取第一个属性(因为你只查了一个标题,所以这里只会有一个结果).Value拿到这个属性对应的页面数据对象,之后就能正常获取title了
另外要确保你的项目已经引用了Newtonsoft.Json NuGet包,不然JObject这些类型会找不到哦!
内容的提问来源于stack exchange,提问作者Hamed.Bny
相关产品推荐
相关产品推荐

