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

Node.js请求https接口获取数据时Response出现鬼符、字段异常问题

问题根源
  • API返回JSON存在键名异常:部分ship_name键被插入大量空白字符,变为sh ip_name,解析后无法通过标准ship_name字段读取属性,导致取值为undefined,两次对比必然不相等,触发异常打印。
  • 未做属性兼容:直接对ship_name做全等对比,没有处理异常键、前后空格等情况,容错率极低。
  • 引用传递隐患:直接将解析后的ship对象引用存入缓存,若后续对象属性发生变更会直接影响历史值的对比结果。
修复方案

1. 新增名称兼容读取方法

统一处理异常键名,自动过滤键名和值的空白字符:

function getValidShipName(ship) {
    // 优先读取标准键
    if (typeof ship.ship_name === 'string') {
        return ship.ship_name.trim();
    }
    // 遍历所有键匹配异常变形的ship_name
    for (const key of Object.keys(ship)) {
        if (key.replace(/\s+/g, '') === 'ship_name') {
            return ship[key].trim();
        }
    }
    // 兜底返回空字符串,避免undefined参与对比
    return '';
}

2. 修改对比逻辑

使用兼容方法读取名称后再做对比,同时过滤空值的异常情况:

checkChange(oldShip, newShip) {
    const oldName = getValidShipName(oldShip);
    const newName = getValidShipName(newShip);
    // 仅当两个名称都有效且不相同时才打印
    if (oldName && newName && oldName !== newName) {
        console.log(`${oldName} | ${newName}`);
    }
}

3. 优化缓存存储逻辑

避免引用传递问题,仅存储需要的核心属性到缓存:

// 替换原代码中 shipData[ship.hex_code] = ship
shipData[ship.hex_code] = {
    ship_name: getValidShipName(ship),
    hex_code: ship.hex_code,
    score: ship.score,
    rank: ship.rank
};

内容的提问来源于stack exchange,提问作者Gravity Assist

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 16:45:08