如何在谷歌表格自定义函数中从JSON获取数据

onu*_* rr 1 javascript editor google-sheets

我一直在尝试根据一些加密货币市场的价格进行计算。与此同时,我尝试学习在脚本编辑器中编写一个获取股票数据的自定义函数。到目前为止,我可以通过以下代码获取数据;

    function getkrakenbtc() {
    var myUrl = "https://api.kraken.com/0/public/Ticker?pair=XBTUSD";
    var jsonData = UrlFetchApp.fetch(myUrl);
    var jsonString = jsonData.getContentText();
    return jsonString;
    }
Run Code Online (Sandbox Code Playgroud)

但是这个函数将所有数据放入一个单元格中,如下所示:

{
    "error": [],
    "result": {
        "XXBTZUSD": {
            "a": ["6828.90000", "1", "1.000"],
            "b": ["6822.40000", "3", "3.000"],
            "c": ["6828.30000", "0.45700000"],
            "v": ["8345.28377914", "11241.98107284"],
            "p": ["7079.63828", "7171.18596"],
            "t": [22419, 30041],
            "l": ["6751.00000", "6751.00000"],
            "h": ["7432.70000", "7529.70000"],
            "o": "7410.10000"
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

然后我借助公式得到我想要的部分。如何使用 javascript 获取上述数组的 a 或 b 项?

Die*_*ego 5

转换jsonString为对象JSON.parse()。然后您可以使用点或括号表示法来访问您想要的值。这是一个例子。

function getAandB() {
  var jsonString = getkrakenbtc();
  var jsonObject = JSON.parse(jsonString);
  var a = jsonObject["result"]["XXBTZUSD"]["a"];
  var b = jsonObject["result"]["XXBTZUSD"]["b"];
}

function getkrakenbtc() {
  var myUrl = "https://api.kraken.com/0/public/Ticker?pair=XBTUSD";
  var jsonData = UrlFetchApp.fetch(myUrl);
  var jsonString = jsonData.getContentText();
  return jsonString;
}
Run Code Online (Sandbox Code Playgroud)

如果您想要可在工作表中使用的自定义函数,您可以根据自定义函数参考文档调整上述内容。例如:

/**
 * Get the array of values defined by 'ticker' and 'letter' from the selected cell, which contains valid JSON.
 *
 * @param {String} ticker Example: "XXBTZUSD"
 * @param {String} letter Example: "a" or "b"
 * @param {String} cell The cell containing the JSON
 * @return The array of values
 * @customfunction
 */
function GETVALUE(ticker, letter, cell) {
  var jsonObject = JSON.parse(cell);
  return jsonObject["result"][ticker][letter];
}
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述