Как подключить веб-API с URL и использовать эти данные?

#google-apps-script #google-data-studio

# #google-apps-script #google-data-studio

Вопрос:

Я закончил учебник по подсчету времени загрузки пакетов npm, теперь я могу использовать свой веб-api JSON с url, но я не знаю, как разобрать его по строкам с помощью функции responseToRows (), я могу получить данные в Logger.log(). Моя структура JSON

 [
    {CODE:value,PRICE:value,QTY:value},
    {CODE:value,PRICE:value,QTY:value}...
]
 

Значение, которое я хотел бы:

 function responseToRows(requestedFields, parsedResponse) {
  // Transform parsed data and filter for requested fields
  return response.map(function() {
    var row = [];
    requestedFields.asArray().forEach(function (field) {
      switch (field.getId()) {
        case 'CODE':
          return row.push(CODE);
        case 'PRICE':
          return row.push(PRICE);
        case 'QTY':
          return row.push(QTY);
        default:
          return row.push('');
      }
    });
    return { values: row };
  });
}
 

но я не знаю, как row.push() в этом

Ответ №1:

Есть несколько дополнительных изменений, которые необходимо внести в исходную функцию из руководства:

  • Вероятно, вы не будете использовать requestedFields параметр так, как он используется в руководстве, поскольку это объект, основанный на том, что используется Data Studio. Таким образом, вы можете удалить его и просто просмотреть ключи каждого передаваемого вами объекта (см. Код ниже).
  • parsedResponse Аргумент не используется в функции, и вы используете response его вместо этого, поэтому вам также необходимо изменить имя аргумента.
  • Внутри функции map отсутствует имя аргумента, которое будет использоваться при вводе значений в строку внутри switch (см. Код ниже). Я назвал его transaction , но вы можете использовать другое имя, если хотите.

При выполнении этих изменений код становится примерно следующим:

 function responseToRows(response) {
  return response.map(function(transaction) {
    var row = [];

    Object.keys(transaction).forEach(function (field) {
      switch (field) {
        case 'CODE':
          return row.push(transaction.CODE);
        case 'PRICE':
          return row.push(transaction.PRICE);
        case 'QTY':
          return row.push(transaction.QTY);
        default:
          return row.push('');
      }
    });
    return { values: row };
  });
}
 

И затем вы можете протестировать его следующим образом:

 function test() {
  const testData = [
    {CODE:1,PRICE:1,QTY:1},
    {CODE:2,PRICE:2,QTY:2},
    {CODE:3,PRICE:3,QTY:3},
    {CODE:4,PRICE:4,QTY:4},
  ];
  Logger.log(responseToRows(testData));
}
// Result:
//[{values=[1.0, 1.0, 1.0]}, 
// {values=[2.0, 2.0, 2.0]}, 
// {values=[3.0, 3.0, 3.0]}, 
// {values=[4.0, 4.0, 4.0]}
//]
 

Кроме того, если вы планируете записать этот результат на лист, то, вероятно, лучше иметь его в формате 2-мерного массива, поэтому вам придется изменить return { values: row }; на just return row; .