Google Sheets使用importJSON拉取OSRS价格API数据截断及ID关联问题咨询
1 解决ImportJSON字段筛选与数据截断问题
- 首先填充筛选参数限制返回字段:在B2单元格输入
/data/*/avgHighPrice,/data/*/avgLowPrice,仅拉取你需要的两个字段,避免无关数据占用返回配额导致截断。 - 调整输出格式:将公式修改为
=IMPORTJSON(B1,B2,"noHeaders,transpose"),即可直接输出你需要的、以物品ID为横向表头的格式。 - 若仍存在截断问题,说明第三方ImportJSON插件的默认返回长度限制不足,建议直接使用自定义脚本拉取数据,稳定性更高。
2 优化物品映射函数并关联价格数据
你当前的naming函数存在冗余逻辑,且修改Object.prototype容易触发Google Apps Script的上下文冲突,建议替换为以下优化版本,同时新增合并数据的自定义函数一步输出最终结果:
2.1 优化后的完整脚本
// 拉取物品ID与名称映射 function getOsrsItemMapping(url) { const response = UrlFetchApp.fetch(url); const data = JSON.parse(response.getContentText()); const result = [['ID', 'Name']]; data.forEach(item => { result.push([item.id, item.name]); }); return result; } // 直接拉取价格并关联名称,输出最终表格 function getOsrsPriceWithName(priceApiUrl, mappingApiUrl) { // 拉取1小时价格数据 const priceRes = UrlFetchApp.fetch(priceApiUrl); const priceData = JSON.parse(priceRes.getContentText()).data; // 拉取物品映射数据 const mappingRes = UrlFetchApp.fetch(mappingApiUrl); const mappingData = JSON.parse(mappingRes.getContentText()); // 构造ID-名称映射字典,提升查找效率 const idToName = {}; mappingData.forEach(item => { idToName[item.id] = item.name; }); // 组装结果表 const output = [['ID', 'Name', 'avgHighPrice', 'avgLowPrice']]; Object.keys(priceData).forEach(itemId => { const priceInfo = priceData[itemId]; // 过滤无价格或无匹配名称的物品 if (idToName[itemId] && priceInfo.avgHighPrice && priceInfo.avgLowPrice) { output.push([ itemId, idToName[itemId], priceInfo.avgHighPrice, priceInfo.avgLowPrice ]); } }); return output; }
2.2 使用方法
直接在任意空白单元格输入公式:=getOsrsPriceWithName("https://prices.runescape.wiki/api/v1/osrs/1h", "https://prices.runescape.wiki/api/v1/osrs/mapping")
即可自动输出你需要的、包含ID、物品名称、两个价格字段的完整表格,无需再分别调用两个接口手动匹配。
内容的提问来源于stack exchange,提问作者user3831119
相关产品推荐
相关产品推荐

