如何将JSON中的嵌套数组拆分为Google Sheets中的表(使用Javascript?)

如何将JSON中的嵌套数组拆分为Google Sheets中的表(使用Javascript?),javascript,json,google-apps-script,google-sheets,Javascript,Json,Google Apps Script,Google Sheets,我终于通过OAuth2连接到一个性能报告(共享)的JSON,我想知道如何将这个对象加载到Google表单中,使其成为矩阵格式 { "id": "ID-23035", "total_gain": 11795.72, "holdings": [ { "symbol": "APX", "total_gain": 11525.72, }, { "sy

我终于通过OAuth2连接到一个性能报告(共享)的JSON,我想知道如何将这个对象加载到Google表单中,使其成为矩阵格式

{
    "id": "ID-23035",
    "total_gain": 11795.72,
    "holdings": 
     [
        {
            "symbol": "APX",
            "total_gain": 11525.72,
        },
        {
            "symbol": "MP1",
            "total_gain": 270,
        }
    ]
}
整个JSON存储在一个报告对象中

我知道如何使用以下方法从前两行提取“id”和“总增益”:

  var id= report_data.id
  var total_gain = report_data.total_gain
然而,我想考虑控股部分,即

  var holdings = report_data.holdings
然后将其导入矩阵样式表中的Google Sheets中,使其看起来像:

|-----symbol-----|----total gain-----|

|------APX-------|-----11525.72------|

|------MP1-------|--------270--------|

是否有某种代码/函数/脚本可以循环并创建此矩阵/表?我猜Google应用程序脚本使用JavaScript?

您可以使用一个简单的for循环将其转换为二维数组或array.map

var arr2D = holdings.map(function(e){
          return [e.symbol,e.total_gain]});

您可以使用简单的for循环将其转换为二维数组或array.map

var arr2D = holdings.map(function(e){
          return [e.symbol,e.total_gain]});

您可以在google工作表中使用名称符号和总增益设置标题,然后使用符号和总增益值创建数据密钥对,现在您可以直接在工作表中插入数据

var data = {
    "id": "ID-23035",
    "total_gain": 11795.72,
    "holdings": 
     [
        {
            "symbol": "APX",
            "total_gain": 11525.72,
        },
        {
            "symbol": "MP1",
            "total_gain": 270,
        }
    ]
}  

var formatdata =[];
    data.holdings.forEach(function(val,index){  
      formatdata[val.symbol] = val.total_gain; 
    });
    console.log(formatdata)

您可以在google工作表中使用名称符号和总增益设置标题,然后使用符号及其总增益值创建数据密钥对,现在您可以直接在工作表中插入数据

var data = {
    "id": "ID-23035",
    "total_gain": 11795.72,
    "holdings": 
     [
        {
            "symbol": "APX",
            "total_gain": 11525.72,
        },
        {
            "symbol": "MP1",
            "total_gain": 270,
        }
    ]
}  

var formatdata =[];
    data.holdings.forEach(function(val,index){  
      formatdata[val.symbol] = val.total_gain; 
    });
    console.log(formatdata)
数据={
“id”:“id-23035”,
“总收益”:11795.72,
“控股”:
[
{
“符号”:“APX”,
“总收益”:11525.72,
},
{
“符号”:“MP1”,
“总增益”:270,
}
]
}
让TwoDArray=data.holdings.map({symbol,total_gain})=>[symbol,total_gain])
console.log(TwoDArray)
数据={
“id”:“id-23035”,
“总收益”:11795.72,
“控股”:
[
{
“符号”:“APX”,
“总收益”:11525.72,
},
{
“符号”:“MP1”,
“总增益”:270,
}
]
}
让TwoDArray=data.holdings.map({symbol,total_gain})=>[symbol,total_gain])
log(TwoDArray)
(代表问题作者发布解决方案)

这是我使用的结果代码。请注意,我最终返回了3个字段,因此colNumber从2更改为3

  var arr2D = holdings.map(function(e){
          return [e.symbol,e.name, e.total_gain]});
  var range = SpreadsheetApp.getActiveSheet().getRange(8,1,arr2D.length,3)       
  range.setValues(arr2D);    
(代表问题作者发布解决方案)

这是我使用的结果代码。请注意,我最终返回了3个字段,因此colNumber从2更改为3

  var arr2D = holdings.map(function(e){
          return [e.symbol,e.name, e.total_gain]});
  var range = SpreadsheetApp.getActiveSheet().getRange(8,1,arr2D.length,3)       
  range.setValues(arr2D);    

谢谢,这对2 x 2数据非常有效!现在我还需要研究如何更改它,以便根据JSON中的“股票”数量动态更改它。我猜我可以做一些JSON计数,然后设置要编辑的单元格范围?我目前的代码是:var arr2D=holdings.map(函数(e){return[e.symbol,e.total_gain]});var range=SpreadsheetApp.getActiveSheet().getRange(“A8:B9”);范围。设定值(arr2D)@dsnO阅读参考资料。我的代码将根据股票数量动态变化。不需要计数,除非你想通过for循环方法。谢谢!!!完美-这工作得很好。幸运的是,我没有尝试找到某种计数函数。Cheers@I'-'I P.S.希望您不介意我编辑了您的评论,以包含最终代码(我不确定这类东西的正确礼仪是什么(?)(我已经将编辑从问题作者转移到了自己的CW帖子)。谢谢,这对2x2数据非常有效!现在我还需要研究如何更改它,以便根据JSON中的“股票”数量动态更改它。我猜我可以做一些JSON计数,然后设置要编辑的单元格范围?我目前的代码是:var arr2D=holdings.map(函数(e){return[e.symbol,e.total_gain]});var range=SpreadsheetApp.getActiveSheet().getRange(“A8:B9”);范围。设定值(arr2D)@dsnO阅读参考资料。我的代码将根据股票数量动态变化。不需要计数,除非你想通过for循环方法。谢谢!!!完美-这工作得很好。幸运的是,我没有尝试找到某种计数函数。Cheers@I'-'I P.S.希望你不介意我编辑了你的评论,以包含最终代码(我不确定这类东西的正确礼仪是什么(?)(我已经将编辑从问题作者转移到了自己的CW帖子)。谢谢,我目前正在根据其他评论制定解决方案。只是想知道,如果我每个符号有多个数据点,您发布的这个解决方案是否会占上风?e、 g.我只列出了“总收益”,但我可能会选择添加一些。另外,将“formatdata”插入Google Sheet中的单元格是否容易?实际上,nvm-感谢您的帮助-但看起来上面的另一个解决方案已经对我起作用了!您可以根据需要扩展数据,并在SheetsHanks中设置相应的标题。我目前正在基于其他注释制定解决方案。只是想知道,如果我每个符号有多个数据点,您发布的这个解决方案是否会占上风?e、 g.我只列出了“总收益”,但我可能会选择添加一些。另外,将“formatdata”插入Google Sheet中的单元格是否容易?实际上,nvm-感谢您的帮助-但看起来上面的另一个解决方案已经对我起作用了!您可以根据需要扩展数据,并在图纸中设置相应的标题