访问第三级 JSON 对象的 Google App 脚本

问题描述

当我尝试在 Google 表格上调用 hello() 时,它返回

错误类型错误:无法读取属性 '5。未定义的汇率'(第 50 行)。

Apps 脚本的触发器也已设置

标准 设置
选择要运行的函数 你好
在部署时运行
选择事件源 来自电子表格
选择事件类型 打开时
失败通知设置 每天通知

JSON 对象

{
    "Realtime Currency Exchange Rate": {
        "1. From_Currency Code": "USD","2. From_Currency Name": "United States Dollar","3. To_Currency Code": "SGD","4. To_Currency Name": "Singapore Dollar","5. Exchange Rate": "1.32783000","6. Last Refreshed": "2021-02-26 01:28:59","7. Time Zone": "UTC","8. Bid Price": "1.32783000","9. Ask Price": "1.32783000"
    }
}

Google 应用脚本功能

function hello(){
  var usdCurrency = "USD";
  var AV_API_Key = "KEYS";
  var sgdCurrency = "SGD"
  var url = "https://www.alphavantage.co/query?function=CURRENCY_EXCHANGE_RATE&from_currency=" + usdCurrency + "&to_currency=" + sgdCurrency  + "&apikey=" + AV_API_Key;

  var response =  UrlFetchApp.fetch(url);
  var result =  JSON.parse(response.getContentText());
  var currencyPrice = result["Realtime Currency Exchange Rate"]["5. Exchange Rate"];
  
  Logger.log(currencyPrice); // 1.32794000
  Logger.log(typeof(currencyPrice)); // String
  return currencyPrice;
  
}

更新

我设置了一个名为 jsonObj 的预定义变量,它能够获取对象中的项目并将其放置在 Google 表格中。


function initTesting(){
  var jsonObj = {
    "Realtime Currency Exchange Rate": {
        "1. From_Currency Code": "USD","9. Ask Price": "1.32783000"
    }
};
var getPrice = jsonObj["Realtime Currency Exchange Rate"]["5. Exchange Rate"];
return getPrice;
}

解决方法

我不确定这是错误还是什么,但我已经找到了解决方案。

function hello(){
  var usdCurrency = "USD";
  var AV_API_Key = "KEYS";
  var sgdCurrency = "SGD"
  var url = "https://www.alphavantage.co/query?function=CURRENCY_EXCHANGE_RATE&from_currency=" + usdCurrency + "&to_currency=" + sgdCurrency  + "&apikey=" + AV_API_Key;

  var response =  UrlFetchApp.fetch(url);
  var result =  JSON.parse(response.getContentText());
  var currencyPrice = result["Realtime Currency Exchange Rate"]["5. Exchange Rate"];

尽管当我最初登录 Logger.log(typeof(currencyPrice)); 时,它在日志中显示了 String。但是一旦我在下面的代码中使用了 String(),它就能够反映在谷歌表格上。

  Logger.log(currencyPrice); // 1.32794000
  Logger.log(typeof(currencyPrice)); // String
  // uses  String() on the currency price
  stringCurrencyPrice = String(currencyPrice)
  return stringcurrencyPrice;
  
}

}

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...