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

MediaWiki API返回JSON解析问题求助及失败原因排查

问题原因排查

前两种方法返回undefined的原因

MediaWiki API返回的pages字段并非直接包含excerpt的平面对象,而是以页面ID作为键名的嵌套对象。结构大致如下:

{
  "pages": {
    "12345": { // 这里的12345是动态生成的页面ID
      "excerpt": "页面摘要内容",
      "title": "页面标题",
      // 其他页面相关字段
    }
  }
}

你直接访问data.pages.excerpt,相当于在pages对象里找名为excerpt的键,显然不存在,所以返回undefined。

后两种方法报错的原因

data本身已经是API请求后解析完成的JS对象(比如用fetch的response.json()或jQuery的$.getJSON处理过),data.pages自然也是JS对象,不是JSON字符串。而JSON.parse()只能处理JSON格式的字符串,传入对象会直接抛出语法错误,导致进入catch块。

解决方法

方法1:获取单个页面的excerpt(常用场景)

如果查询只会返回一个页面,直接提取pages对象的第一个值即可:

// 提取pages下所有页面对象为数组
const pageList = Object.values(data.pages);
// 取第一个页面对象
const targetPage = pageList[0];
// 提取excerpt,用可选链避免页面不存在时报错
this.answer = targetPage?.excerpt;

方法2:遍历所有返回的页面(多页面场景)

如果查询可能返回多个页面,遍历pages的键值对处理:

for (const pageId in data.pages) {
  const currentPage = data.pages[pageId];
  console.log(currentPage.excerpt); // 输出每个页面的摘要
  // 按需存储或展示excerpt
}

额外检查:确保API请求包含返回excerpt的参数

如果还是拿不到excerpt,检查你的API请求是否添加了必要参数:

  • 基础参数:action=query
  • 指定返回摘要的参数:若用prop=extracts,需搭配exintro=1或exsentences=2;若用list=search,需搭配srprop=snippet(不同参数对应不同返回结构,注意区分)

内容的提问来源于stack exchange,提问作者Yazad Pardiwala

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 22:03:17