如何在Google Sheets自定义函数中提取加密货币API的JSON数据?
如何从Kraken API返回的JSON中提取特定行情数据(Google Sheets脚本)
嘿,你已经迈出了第一步——成功调用Kraken API获取BTC/USD的行情数据,但现在整串JSON挤在一个单元格里确实没法直接用对吧?我来给你拆解一下怎么提取你需要的具体数据~
核心问题:你需要先解析JSON字符串
你当前的函数只是把API返回的原始文本直接返回了,我们得先把这串文本转换成JavaScript能识别的对象,才能从中挑出需要的字段。
第一步:修改代码解析JSON
先给你的函数加上JSON解析的步骤,代码改成这样:
function getkrakenbtc() { var myUrl = "https://api.kraken.com/0/public/Ticker?pair=XBTUSD"; var jsonData = UrlFetchApp.fetch(myUrl); var jsonString = jsonData.getContentText(); // 新增:把JSON字符串转成可操作的对象 var data = JSON.parse(jsonString); }
第二步:了解Kraken API的返回结构
Kraken的Ticker API返回的数据结构是这样的:
- 所有行情数据都在
result字段下 - 你请求的
XBTUSD对,在返回里对应的键是XXBTZUSD(Kraken的内部标识) - 每个交易对的行情里包含多个字段,比如
c是最新成交价(数组,第一个元素是价格,第二个是成交量)、a是买一价、b是卖一价等
第三步:提取你需要的具体数据
比如你想获取最新成交价,可以修改函数直接返回这个值:
function getkrakenbtc() { var myUrl = "https://api.kraken.com/0/public/Ticker?pair=XBTUSD"; var jsonData = UrlFetchApp.fetch(myUrl); var jsonString = jsonData.getContentText(); var data = JSON.parse(jsonString); // 先检查API是否返回错误 if (data.error.length > 0) { return "API错误:" + data.error.join(", "); } // 提取最新成交价,转成数字方便后续计算 var lastPrice = Number(data.result.XXBTZUSD.c[0]); return lastPrice; }
其他常用字段的提取示例
如果你需要其他数据,直接替换对应的字段就行:
- 买一价(最高买盘):
Number(data.result.XXBTZUSD.a[0]) - 卖一价(最低卖盘):
Number(data.result.XXBTZUSD.b[0]) - 24小时最高价:
Number(data.result.XXBTZUSD.h[1]) - 24小时最低价:
Number(data.result.XXBTZUSD.l[1])
进阶:一次性返回多个数据到多个单元格
如果想同时获取多个行情数据,比如最新价、买一、卖一,可以返回一个数组,这样Google Sheets会自动把数据填充到相邻单元格:
function getkrakenbtc() { var myUrl = "https://api.kraken.com/0/public/Ticker?pair=XBTUSD"; var jsonData = UrlFetchApp.fetch(myUrl); var jsonString = jsonData.getContentText(); var data = JSON.parse(jsonString); if (data.error.length > 0) { return ["API错误:" + data.error.join(", ")]; } var ticker = data.result.XXBTZUSD; // 返回数组,每个元素对应一个单元格 return [ Number(ticker.c[0]), // 最新成交价 Number(ticker.a[0]), // 买一价 Number(ticker.b[0]), // 卖一价 Number(ticker.h[1]), // 24小时最高价 Number(ticker.l[1]) // 24小时最低价 ]; }
使用的时候,选中一行的5个单元格,输入=getkrakenbtc()然后按Ctrl+Shift+Enter(数组公式),就能把数据分别填充进去啦~
内容的提问来源于stack exchange,提问作者onur rr
相关产品推荐
相关产品推荐

