簡體   English   中英

Google 表格 JSON API

[英]Google sheets JSON API

我正在嘗試通過向帶有 ID 的請求發送請求,以 JSON 格式從谷歌工作表中檢索數據,以便我取回該 ID 的所有數據。 我正在使用此腳本執行該任務,但有兩個問題:

  1. 如果未找到數據,腳本會出錯。
  2. 我有兩個相同ID的記錄,我只得到第一條記錄。

我的代碼

var ss = SpreadsheetApp.openById("17IIEmFXjmKZpqRlj8fs4XV7t859TLY_D24sqvrhc9Pc");
var sheet = ss.getSheetByName("data")
var rng = ss.getDataRange()
var data = rng.getValues()
var headings = data[0]

/* Take a product ID as input and return the
 *  row corresponding to that product ID.*/

function productQuery(prodId){
  for (var i = 1; i < data.length; i++){
    if (prodId === data[i][0]){
      return data[0]
    }
  }
}

/* Take a spreadsheet (product) row and turn it into an object
 with spreadsheet headings as object keys. */

function formatProduct(rowData){
  var product = {}
  for (var i = 0; i < headings.length; i++){
    product[headings[i].toString()] = rowData[i]
  }
  return product
}

function doGet(request) {
  // Check for a valid request URI
  if (request.parameter.action !== undefined){
    if (request.parameter.prodid !== undefined){
      prodIds = request.parameters.prodid
      
      // The object to be returned as JSON
      response = {
        products : []
      }
      
      // Fill the products array with requested products
      for (var i = 0; i < prodIds.length; i++){   
        sheetData = productQuery(prodIds[i])
        product = formatProduct(sheetData)
        response.products.push(product)
      }
      
      if (response.products.length > 0){
        return ContentService.createTextOutput(JSON.stringify(response));
      } else {
        return ContentService.createTextOutput('Invalid Request. Product ID(s) not found.');
      }      
    } else {
      return ContentService.createTextOutput('Invalid Request. Use at least one valid "prodid" parameter.');
    } 
  } else {
    return ContentService.createTextOutput('Invalid Request. Use a valid "action" parameter.');
  }
}

回答

為了解決您的問題,您必須更改您的功能productQueryformatProductdoGet

根據Google Apps Script - Web Apps 部署示例,您在request.parameters值中檢索一個列表。 出於這個原因,如果您想從您的應用程序中獲取許多對象,您可以對您的函數進行以下更改:

代碼

function productQuery(prodId){
 let dataList = [];
 for (var i = 1; i < data.length; i++){
   if (prodId === data[i][0]){
     dataList.push(data[i]); // This should return data[i] instead of the first row which is the header
   }
 }
  return dataList; // Return a list of products instead
}

function formatProduct(rowData){
 var product = {}
 for (var i = 0; i < headings.length; i++){
   product[headings[i].toString()] = rowData[i]
 }
 return product
}
function doGet(request) {
 // Check for a valid request URI
 if (request.parameter.action !== undefined){ // This parameter is not used in the code
   if (request.parameter.prodid !== undefined){
     let prodIds = request.parameters.prodid
    
     // The object to be returned as JSON
     let response = {
       products : []
     }
    
     // Fill the products array with requested products
     for (var i = 0; i < prodIds.length; i++){  
     /** CHANGES - START*/
       productQuery(prodIds[i]).forEach(sheetData => { // Iterate trough the items list
         let product = formatProduct(sheetData)
         response.products.push(product)
       })
     /** CHANGES - END*/
     }
    
     if (response.products.length > 0){
       return ContentService.createTextOutput(JSON.stringify(response));
     } else {
       return ContentService.createTextOutput('Invalid Request. Product ID(s) not found.');
     }     
   } else {
     return ContentService.createTextOutput('Invalid Request. Use at least one valid "prodid" parameter.');
   }
 } else {
   return ContentService.createTextOutput('Invalid Request. Use a valid "action" parameter.');
 }
}

詢問

假設我們有一個等於“g1”的重復 ID。

示例 1

通過 ID 檢索單個項目:

https://script.google.com/.../exec?action=1&prodid=g123

回應:

{"products":[{"ID":"g123","Name":"First Rec","Price":20,"Stock":35}]}

示例 2

檢索具有重復 ID 的項目:

https://script.google.com/.../exec?action=1&prodid=g1

回復:

{"products":[{"ID":"g1","Name":"name","Price":22,"Stock":21},{"ID":"g1","Name":" name","Price":22,"Stock":21}]}

示例 3

檢索不同的項目:

https://script.google.com/.../exec?action=1&prodid=g1&prodid=g2

回復:

{"products":[{"ID":"g1","Name":"name","Price":22,"Stock":21},{"ID":"g1","Name":" name","Price":22,"Stock":21},{"ID":"g2","Name":"name","Price":44,"Stock":12}]}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM