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
相关产品推荐
相关产品推荐

