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

JavaScript通过变量访问JSON对象属性失败问题排查

问题根因

匹配失败的核心原因是JavaScript对象键严格区分大小写,而以太坊地址本身是大小写不敏感的:

  • 你传入的测试地址0x0327112423f3a68efdf1fcf402f6c5cb9f7c33fd是全小写格式
  • 1inch官方接口实际返回的tokens对象的键是EIP-55校验和格式的地址(包含大小写混合的字母,和你传入的全小写字符串不完全相等)
  • 你自行整理的接口返回示例使用了全小写键,和真实接口返回结构不符,因此用in操作符做严格相等匹配时会判定为不存在。
修复代码

对地址做大小写归一化处理,不管传入参数、接口返回键是什么大小写格式,统一转成全小写后再做匹配,修复后的完整代码如下:

function getTokenDetails(findTokenAddress) {
  const url = `https://api.1inch.io/v4.0/1/tokens`;
  const xhr = new XMLHttpRequest();
  xhr.open("GET", url);
  xhr.setRequestHeader("accept", "application/json");

  xhr.onreadystatechange = function() {
    if (xhr.readyState === 4) {
      if (xhr.status === 200) {
        const tokenMap = JSON.parse(xhr.responseText).tokens;
        // 入参统一转小写,兼容任意大小写格式的地址输入
        const targetAddr = findTokenAddress.toLowerCase();
        // 遍历所有token地址,转小写后匹配
        const matchEntry = Object.entries(tokenMap).find(([addr]) => addr.toLowerCase() === targetAddr);
        const tokenDetails = matchEntry ? matchEntry[1] : null;
        
        if (tokenDetails) {
          console.log("匹配到代币详情:", tokenDetails);
          // 此处编写后续使用tokenDetails的业务逻辑
        } else {
          alert("Could not find token in json?");
        }
      } else {
        alert(`请求失败,状态码:${xhr.status}`);
      }
    }
  };

  xhr.send();
}

// 测试调用,全小写、混合大小写、EIP-55格式的地址都能正常匹配
getTokenDetails('0x0327112423f3a68efdf1fcf402f6c5cb9f7c33fd');
额外说明
  • 上述修复兼容任意大小写格式的传入地址,不需要调用方提前转换地址格式
  • 当前函数是异步请求,如果需要在函数外部拿到tokenDetails结果,需要新增回调函数参数,或者把函数改写成Promise形式,不能直接在函数内部return后在外部同步获取结果。

内容的提问来源于stack exchange,提问作者John Smith

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 11:27:18