#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;
.