在 Google Apps 脚本中调用 Key:Value 对返回 "Undefined" 而不是值
Calling a Key:Value pair in Google Apps Script is returning "Undefined" instead of the value
var api_key_id = '1234567890'
function open(ticker, date) {
ticker="TSLA";
date="2019-01-14";
var url = "https://api.polygon.io/v1/open-close/" + ticker + "/" + date + "?apiKey=" + api_key_id;
var response = UrlFetchApp.fetch(url);
var data = response.getContentText();
Logger.log(data);
}
当上面的代码是 运行 时,它记录如下:
{"status":"OK","from":"2019-01-14T03:30:00Z","symbol":"TSLA","open":342,"high":343.3,"low":335.37,"close":338.93,"afterHours":336.2148,"volume":4425458}
但是当我尝试这样做时:
Logger.log(data.open);
输出为:
undefined
"data" 变量实际上不是对象吗?我错过了什么?
编辑:找到解决方案:
将 getContentText() 的结果解析为 JSON 允许调用所需的变量,请参见下文。感谢 chuckx 指出这一点!
var api_key_id = '1234567890'
function open(ticker, date) {
var url = "https://api.polygon.io/v1/open-close/" + ticker + "/" + date + "?apiKey=" + api_key_id;
var response = UrlFetchApp.fetch(url);
var data = response.getContentText();
var json = JSON.parse(data);
Logger.log(json.open);
HTTPResponse.getContextText()
returns 一个字符串,所以它实际上不是一个对象。
自此 API returns JSON,您可以使用 JSON.parse()
解析字符串,然后以您期望的方式与返回的对象交互。
...
var apiResponse= JSON.parse(response.getContentText());
Logger.log(apiResponse.open);
var api_key_id = '1234567890'
function open(ticker, date) {
ticker="TSLA";
date="2019-01-14";
var url = "https://api.polygon.io/v1/open-close/" + ticker + "/" + date + "?apiKey=" + api_key_id;
var response = UrlFetchApp.fetch(url);
var data = response.getContentText();
Logger.log(data);
}
当上面的代码是 运行 时,它记录如下:
{"status":"OK","from":"2019-01-14T03:30:00Z","symbol":"TSLA","open":342,"high":343.3,"low":335.37,"close":338.93,"afterHours":336.2148,"volume":4425458}
但是当我尝试这样做时:
Logger.log(data.open);
输出为:
undefined
"data" 变量实际上不是对象吗?我错过了什么?
编辑:找到解决方案: 将 getContentText() 的结果解析为 JSON 允许调用所需的变量,请参见下文。感谢 chuckx 指出这一点!
var api_key_id = '1234567890'
function open(ticker, date) {
var url = "https://api.polygon.io/v1/open-close/" + ticker + "/" + date + "?apiKey=" + api_key_id;
var response = UrlFetchApp.fetch(url);
var data = response.getContentText();
var json = JSON.parse(data);
Logger.log(json.open);
HTTPResponse.getContextText()
returns 一个字符串,所以它实际上不是一个对象。
自此 API returns JSON,您可以使用 JSON.parse()
解析字符串,然后以您期望的方式与返回的对象交互。
...
var apiResponse= JSON.parse(response.getContentText());
Logger.log(apiResponse.open);