JavaScript如何访问JSON嵌套数据?代码运行异常问题求助
问题根因
你目前代码的核心错误出在调试逻辑和取值前的校验缺失:
- 你写的
Object.keys(walletAddress)完全是错误用法:walletAddress是字符串类型,对字符串调用Object.keys返回的就是每个字符对应的下标索引,也就是你看到的0到41的数字,完全不能体现返回的JSON结构。 - 你没有校验API返回的JSON结构是否符合你的预期,可能存在API返回空值、钱包地址key不存在、对应数组为空的情况,直接取值就会报错。
- 你的API拉取函数里还存在变量名大小写错误:
console.log("url is " + URL);中的URL是大写,和你定义的小写url变量不一致,会直接抛出未定义错误。
修正方案
按以下步骤调整代码即可:
- 把错误的调试语句替换,打印返回的JSON对象的key,确认钱包地址确实是返回对象的顶层key
- 加取值前的类型和长度校验,避免出现未定义报错
- 修正变量名大小写错误
修正后的完整代码
function parseTheDataFunctionSushi(walletAddress, networkName){ // 固定测试参数,后续可改为入参动态传入 const walletAddress = "0x123454843eacf5c5318e1234504251b937d12345"; const networkName = "polygon"; const theparsedJSONdata = pullAndParseAPISushi(walletAddress, networkName); // 打印返回的完整结构和顶层key,确认结构符合预期 console.log("返回的完整JSON:", theparsedJSONdata); console.log("JSON顶层key:", Object.keys(theparsedJSONdata)); // 先校验结构再取值 if (theparsedJSONdata[walletAddress] && Array.isArray(theparsedJSONdata[walletAddress]) && theparsedJSONdata[walletAddress].length > 0) { const firstCrack = theparsedJSONdata[walletAddress][0].poolIndex; console.log("firstCrack取值结果:", firstCrack); // 要取其他字段同理,比如 theparsedJSONdata[walletAddress][0].stakingStrategy } else { console.log("钱包地址对应数据不存在或为空数组"); } } // 修正后的拉取API函数 function pullAndParseAPISushi (walletAddress, networkName){ console.log("传入的钱包地址:", walletAddress); console.log("传入的网络:", networkName); const apiKEY = "96e0cc51-a62e-42ca-acee-910ea7d2a241"; const url = "https://api.zapper.fi/v1/staked-balance/masterchef?addresses%5B%5D="+ walletAddress + "&network=" + networkName + "&api_key=" + apiKEY; console.log("请求URL:", url); const response = UrlFetchApp.fetch(url); console.log("API原始返回:", response); const theparsedJSONdata = JSON.parse(response); return theparsedJSONdata }
运行后先看控制台打印的JSON顶层key是否和你的钱包地址完全一致,如果不一致就用实际打印的key来取值即可。
内容的提问来源于stack exchange,提问作者DBWeinstein
相关产品推荐
相关产品推荐

