You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

从维基百科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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:50:45