Пишем свой JSON API в Google sheets

Допустим, у меня есть в таблицах некий телефонный справочник, который необходимо передавать куда-то другой программе или другому серверу:

телефонный спрарвочник
Условный телефонный справочник

Для этого мне необходимо передать эти данные в формате JSON-текста.

Подготавливаю данные для передачи

function getJSONArr(){
  const ss = SpreadsheetApp.getActiveSpreadsheet()
  const ws = ss.getSheetByName('DB')

  const dataArr = ws.getDataRange().getValues()

  const headers = dataArr.shift()
  
  const jsonArr = dataArr.map(row => {
    let obj = {} 
  
    headers.forEach((h,i) => {
      obj[h] = row[i]
    })
    return obj  
   })
  
  return jsonArr
}

Получая на выходе следующий массив:

массив объектов
Результат console.log

Передача данных

За передачу данных в гугл таблицах отвечает встроенная функция doGet() о которой я ранее уже писал.

Когда скрипт публикуется как веб-приложение, функции doGet() и doPost() вызываются всякий раз, когда делается запрос к URL-адресу скрипта. Вместо возврата объекта пользовательского интерфейса, созданного, например, с помощью HTML, можно использовать Content Service для возврата необработанного текстового содержимого.

Более детально можно почитать здесь — https://developers.google.com/apps-script/reference/content

function doGet() {
  const response = getJSONArr()

  const contService = ContentService.createTextOutput((JSON.stringify(response)))
  contService.setMimeType(ContentService.MimeType.JSON)

  return contService
}

В функцию doGet() я сначала передаю массив: const response = getJSONArr()

А затем собираю все это как Content Service в JSON формате

const contService = ContentService.createTextOutput((JSON.stringify(response))) contService.setMimeType(ContentService.MimeType.JSON)

Далее, разворачиваю скрипт как Web app. При переходе по ссылке получая следующее:

browser json api

Добавить комментарий