Заполнение листа Google с помощью скрипта приложений после получения данных от почтальона

#javascript #json #google-apps-script #postman

Вопрос:

Поэтому я пытаюсь заполнить лист Google с помощью скрипта приложений. Я должен получить объект JSON от почтальона через ПОЧТУ. Объект будет отображаться как таковой:

 {
     "email":"jdoe@gmail.com",
     "full_name": "John Doe",
     "score": 4.0,
     "max_score": 5.0
     "attempt_starttime": "2021-09-21T03:28:13 0000",
     "attempt_endtime":"2021-09-21T03:28:35 0000",
     "invited_on":"2021-09-21T03:27:50 0000",
     "percentage_score":100.0,
}
 

Мы предполагаем, что он всегда будет в таком формате и в таком порядке в обязательном порядке.
Затем данные изменяются и помещаются на этот лист:
Лист Google

Я хотел бы получить помощь в том, как сначала заполнить лист только данными из объекта JSON, так как у меня это не получается. Я верю, что оттуда я смогу изменить его для своих целей. Я также хотел бы знать, как я могу преобразовать временные метки в дни недель и выполнить вычитание из них. Я новичок как в сценарии приложений, так и в почтальоне, поэтому буду признателен за любую помощь.

Спасибо.

Это то, что у меня есть до сих пор:

 function doPost(e) {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const ws = ss.getSheetByName("Sheet1"); 
  const headers = ws.getRange(1, 1, 1, ws.getLastColumn()).getValues()[0];
  const dataHeaders = headers.slice()
  const body = e.postData.contents;
  const jsonBody = JSON.parse(body);
  const data = dataHeaders.map(h => jsonBody[h]);
  ws.appendRow(data);
}
 

Комментарии:

1. Когда я увидел вашу электронную таблицу с изображения, мне показалось, что значения заголовка отличаются от объекта, который вы хотите отправить. Я думаю, что это может быть причиной вашей проблемы. Как насчет изменения значений заголовка с помощью ключей значения, которое вы хотите поместить? Или, как насчет создания объекта для замены значений заголовка и ключей?

2. Ваш json не исправлен, после max_score отсутствует запятая, а после percentage_score-дополнительная запятая!

Ответ №1:

Если вы хотите сохранить заголовки как есть, добавьте строку перед текущими заголовками с точным написанием, т. е. : полное имя, адрес электронной почты, оценка, максимальный балл, время начала попытки, время окончания попытки, приглашенный, процентный балл и исправьте свой json (исправьте ситуацию с запятыми) …

Например

 function myFunction() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const ws = ss.getSheetByName("Sheet1"); 
  const dataHeaders = ws.getRange(1, 1, 1, ws.getLastColumn()).getValues()[0];
  const body = `{
     "email":"jdoe@gmail.com",
     "full_name": "John Doe",
     "score": 4.0,
     "max_score": 5.0,
     "attempt_starttime": "2021-09-21T03:28:13 0000",
     "attempt_endtime":"2021-09-21T03:28:35 0000",
     "invited_on":"2021-09-21T03:27:50 0000",
     "percentage_score":100.0
}`
  const jsonBody = JSON.parse(body);
  const data = dataHeaders.map(h => jsonBody[h]);
  ws.appendRow(data);
}
 

работает нормально
введите описание изображения здесь