【问题标题】:TypeError: Cannot read property '0' of undefined (Google Sheets / App Script)TypeError:无法读取未定义的属性“0”(Google 表格/应用程序脚本)
【发布时间】:2023-03-08 01:51:01
【问题描述】:

我想知道我需要在脚本中进行哪些调整以使结果出现在电子表格中:

TypeError:无法读取未定义的属性“0”(第 7 行)

function Cartola() {
  var url = "https://api.cartolafc.globo.com/mercado/destaques";
  var response = UrlFetchApp.fetch(url);
  var data = response.getContentText();
  var result = JSON.parse(data);
  
  var apelido = result.Atleta[0].apelido;
  var foto = result.Atleta[0].foto;
  var clube_nome = result.Atleta[0].clube_nome;
  var posição = result.Atleta[0].posicao;
  
  var sheet = SpreadsheetApp.getActiveSheet();
  sheet.clear()
  var headerRow = ['apelido','foto','clube_nome','posição'];
  sheet.appendRow(headerRow);
  for(var i=0;i<result[0].Atleta;i++){
    var row = [result.Atleta[i].apelido,result.Atleta[i].foto,result.Atleta[i].clube_nome,result.Atleta[i].posicao];
    SpreadsheetApp.getActiveSheet().appendRow(row);
  }
}

【问题讨论】:

  • result 之后尝试Logger.log(data),然后检查查看日志以查看该对象的输出。也许它已经是一个json对象,你不需要解析它。
  • 通过记录console.log(data)data添加到您的问题中
  • @Marios .getContentText() 只返回一种类型:string
  • @TheMaster 哎呀我的意思是响应不是数据
  • @Marios response 的类型始终为:object,特别是 HttpResponse 类。没有变体。更具体地说,在处理json时,总是需要getContentText(),它返回一个json字符串,你总是需要解析它。

标签: google-apps-script google-sheets


【解决方案1】:

data是一个数组,所以需要先访问元素:

  var apelido = result[0].Atleta.apelido;

我认为您正在尝试将每个玩家打印到电子表格中,但您所写的只是查看其中一个玩家。请先查看API返回的数据,了解其结构。看起来像这样:

[
  {
    "Atleta": {
      "atleta_id": 68952,
      "nome": "Mário Sérgio Santos Costa",
      "apelido": "Marinho",
      "foto": "https://s.glbimg.com/es/sde/f/2019/05/30/cd8a7f9b0744e105efa0a0c572d37d6f_FORMATO.png",
      "preco_editorial": 5
    },
    "escalacoes": 996124,
    "clube": "SAN",
    "clube_nome": "Santos",
    "clube_id": 277,
    "escudo_clube": "https://s.glbimg.com/es/sde/f/organizacoes/2014/04/14/santos_60x60.png",
    "posicao": "Atacante",
    "posicao_abreviacao": "ATA"
  }
]

一旦你理解了数据,然后考虑这个修改后的脚本,它使用batch operations 运行得更快。

function Cartola() {
  var url = 'https://api.cartolafc.globo.com/mercado/destaques';
  var response = UrlFetchApp.fetch(url);
  var results = JSON.parse(response.getContentText());
  
  var table = [['apelido','foto','clube_nome','posição']];
  for (var i = 0; i < results.length; i++) {
    var r = results[i];
    var apelido = r.Atleta.apelido;
    var foto = r.Atleta.foto;
    var clube_nome = r.clube_nome;
    var posição = r.posicao;
    table.push([apelido, foto, clube_nome, posição]);
  }

  var sheet = SpreadsheetApp.getActiveSheet();
  sheet.clear().getRange(1, 1, table.length, table[0].length).setValues(table);
}

【讨论】:

  • 当调整这个细节时,脚本完美地持续到最后,但没有在电子表格中提供任何结果,返回没有任何值。你能告诉我是什么原因造成的吗?
  • @BrondbyIF 查看我修改后的答案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多