调用BattleMetrics API提取字段返回undefined的解决方法
问题原因
提取字段返回undefined是因为解构的层级和JSON实际嵌套结构不匹配,你要找的name、status等字段不在返回结果的最外层。
对照返回的完整结构,层级关系如下:
- 最外层根对象仅包含
data、included两个一级键 data对象下的直接属性为type、id、attributes、relationships- 服务器名称、运行状态、玩家数、IP等核心业务字段,全部嵌套在
data.attributes路径下 - 更细分的服务器配置(比如地图、游戏模式、擦服时间等)在
data.attributes.details路径下
正确提取写法
逐层按嵌套结构解构即可,示例代码:
const api_url = 'https://api.battlemetrics.com/servers/3753675' async function getData() { const response = await fetch(api_url); const json = await response.json(); // 先取一级键data,再从data下的attributes里提取目标字段 const { data } = json; const { id, name, status, players, maxPlayers, ip, port } = data.attributes; // 可打印字段:服务器名、ID、在线状态、当前玩家数、最大玩家数、IP、端口 console.log(name, id, status, players, maxPlayers, ip, port) } getData();
如果要提取更深层的details里的字段,继续向下解构即可:
const { data } = json; const { name, status, details } = data.attributes; // 从details里取地图、服务器类型等字段 const { map, rust_type } = details; console.log(name, status, map, rust_type)
错误说明
之前的写法是直接在最外层的json对象上解构name、id、status,但最外层对象根本不存在这几个键,自然会返回undefined。之前写const { data } = json能正常打印内容,已经找对了第一层路径,顺着data往下找嵌套的attributes就能拿到所有目标字段。
注意:data本身也有一个id属性,和data.attributes.id值完全一致,取用的时候注意区分层级即可。
内容的提问来源于stack exchange,提问作者Levarados
相关产品推荐
相关产品推荐

