Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何通过google脚本将此json返回从API写入google工作表_Json_Google Apps Script - Fatal编程技术网

如何通过google脚本将此json返回从API写入google工作表

如何通过google脚本将此json返回从API写入google工作表,json,google-apps-script,Json,Google Apps Script,我正在调用一个API并获取此JSON: var fact={"columns":["Emerging Markets Sovereing Debt","Emerging Markets Corporate Bonds","US REITs","US Leveraged Loans","AC World Equity","Private Equity","US Long Treasuries","US Large Cap","US Cash","Euro area Large Cap","Emer

我正在调用一个API并获取此JSON:

var fact={"columns":["Emerging Markets Sovereing Debt","Emerging Markets Corporate Bonds","US REITs","US Leveraged Loans","AC World Equity","Private Equity","US Long Treasuries","US Large Cap","US Cash","Euro area Large Cap","Emerging Markets Equity","UK Large Cap","Emerging Markets Local Currency Debt","Japanese Equity","Commodities","Diversified Hedge Funds","World Government Bonds hedged","TIPS","US Aggregate Bonds","US High Yield Bonds","US Inv Grade Corporate Bonds"]}
然后,我使用以下代码对其进行解析:

var fact = JSON.parse(fact)
然后我想把每个字符串写在google工作表的一个特定单元格中:

var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getActiveSheer()
var col = JSON.stringify(fact.columns).split(",")
sheet.getRange(8, 2, col.length, col[0].length).setValues(col);

然而,这不起作用。我得到一个大小非常奇怪的数组。它的大小是34x21,而我原以为它是1x21。

您的代码有几个问题

首先,您引用的API将返回一个JSON字符串,需要调用JSON.Parse将其转换为JavaScript对象,以便访问其内容。但事实上变量定义正在创建一个JavaScript对象,因此将对象传递给JSON.parse将JSON字符串转换为JavaScript对象毫无意义

这样就可以删去一堆代码

第二个主要问题是setValues调用需要一个数组。但是fact_object.columns需要[]数组表示法

最后:fact.columns[0]只是数组中第一个字符串的长度。有关如何使用4参数getRange,请参见解决方案


RangesetValues接受一个2d数组作为输入。@tehhowch这就是为什么我尝试了第二个版本JSON.stringifyfact.columns.split,。然而,我得到了一个奇怪大小的数组,34x21,我本来希望得到一个1x21。当您访问fact.columns而不进行字符串化时,会得到什么维度数组!你会删除这个问题吗?var col=[JSON.parsefact.columns]@themaster不应该是var rowData或var colHeaderRow吗?要成为跨多行的列向量,OP需要将每个条目事实上映射到它自己的数组。非常感谢您的回答。你的第一点完全正确。在代码中,它是一个响应对象。我只是在这里声明它,以确保人们理解json对象被称为事实。
function write_json() {

  var fact_object={"columns":["Emerging Markets Sovereing Debt","Emerging Markets Corporate Bonds","US REITs","US Leveraged Loans","AC World Equity","Private Equity","US Long Treasuries","US Large Cap","US Cash","Euro area Large Cap","Emerging Markets Equity","UK Large Cap","Emerging Markets Local Currency Debt","Japanese Equity","Commodities","Diversified Hedge Funds","World Government Bonds hedged","TIPS","US Aggregate Bonds","US High Yield Bonds","US Inv Grade Corporate Bonds"]}
  Logger.log("fact_object is of type: %s",typeof(fact_object));

  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getActiveSheet();
  // getRange(row, column, numRows, numColumns)
  sheet.getRange(8, 2, 1, fact_object.columns.length).setValues([fact_object.columns]);

  return;
}