gpt4 book ai didi

javascript - Google Sheets 脚本编辑器并正确解析 JSON

转载 作者:行者123 更新时间:2023-12-03 01:45:53 25 4
gpt4 key购买 nike

我正在尝试从 Binance API 解析 JSON 文件所以我可以创建一个 candlestick chartgoogle spreadsheets .

尽管如此,我似乎无法弄清楚如何实现这一点......这是我到目前为止所尝试过的:

function myJSON(){
url = "https://api.kraken.com/0/public/OHLC?pair=XXBTZEUR&since=0&interval=1"
var ss = SpreadsheetApp.getActiveSpreadsheet(),
coinsheet = ss.getSheetByName('Sheet1')
var response = UrlFetchApp.fetch(url, {'muteHttpExceptions': true});
var json = response.getContentText();
var rawdata = JSON.parse(json);
var data = JSON.stringify(rawdata.result.XXBTZEUR)
data = JSON.parse(data)
for (var i = 0; i < data.length; i++) {
for (var j = 0; j < data[i].length; j++) {
var mdata = new Array();var obj = {};
var utcSeconds = data[i][0];
var mdate = new Date(0); // The 0 there is the key, which sets the date to the epoch
mdate.setUTCSeconds(utcSeconds);
open = parseFloat(data[i][1])
high = parseFloat(data[i][2])
low = parseFloat(data[i][3])
close = parseFloat(data[i][4])
obj['date'] = mdate
obj['open'] = open
obj['high'] = high
obj['low'] = low
obj['close'] = close
mdata.push(obj);
Logger.log(mdata);
coinsheet.appendRow(mdata);
}
}
}

运行函数时Logger gives this output但会产生以下错误:

This action would increase the number of cells in the workbook above the limit of 2000000 cells

这怎么可能?只有 720 条记录,为什么 mdata 变量不会在每次循环时被覆盖?这不应该自动创建一个包含列名和数据的表吗?完全迷失在这里。如有任何帮助,我们将不胜感激。

最佳答案

这是一个更新的实现(在工作表上测试,它成功附加行):

function appendApiData() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var coinsheet = ss.getSheetByName('Sheet1');
var url = 'https://api.kraken.com/0/public/OHLC?pair=XXBTZEUR&since=0&interval=1';
var response = UrlFetchApp.fetch(url, {'muteHttpExceptions': true});
var parsedResponse = JSON.parse(response.getContentText());
var data = parsedResponse.result['XXBTZEUR'];
for (var i = 0; i < data.length; i++) {
var utcSeconds = data[i][0];
var mdate = new Date(0); // The 0 there is the key, which sets the date to the epoch
mdate.setUTCSeconds(utcSeconds);
var open = parseFloat(data[i][1])
var high = parseFloat(data[i][2])
var low = parseFloat(data[i][3])
var close = parseFloat(data[i][4])
var row = [mdate, open, high, low, close];
Logger.log(row)
coinsheet.appendRow(row);
}
}

这是日志的摘录:

[18-06-01 11:44:41:028 PDT] [Thu May 31 23:45:00 GMT-07:00 2018, 6452.5, 6452.5, 6447.6, 6448.2]
[18-06-01 11:44:41:146 PDT] [Thu May 31 23:46:00 GMT-07:00 2018, 6450.5, 6450.9, 6450.5, 6450.6]
[18-06-01 11:44:41:263 PDT] [Thu May 31 23:47:00 GMT-07:00 2018, 6450.6, 6450.6, 6447.1, 6449.7]
[18-06-01 11:44:41:364 PDT] [Thu May 31 23:48:00 GMT-07:00 2018, 6449.5, 6449.7, 6447.2, 6447.2]
[18-06-01 11:44:41:446 PDT] [Thu May 31 23:49:00 GMT-07:00 2018, 6447.2, 6450.5, 6447.2, 6450.5]

关于我所做更改的一些注释:

  • 如果您不打算使用中间值,可以将方法调用串在一起(即 JSON.parse(response.getContentText()))
  • 避免使用 JSON.stringify() 后跟 JSON.parse(),这样会不必要地对数据进行编码/解码
  • 删除内部循环,您通过索引显式引用数组项,因此不需要它。就目前而言,内部循环导致您处理每行[行项目数]
  • 避免使用 new Array(),只需使用数组文字(即 [])
  • 构造行时,您需要创建行值的数组,而不是包含单个对象的数组。请参阅Sheet.appendRow() example in the documentation

关于javascript - Google Sheets 脚本编辑器并正确解析 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50645009/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com