[英]Google sheets JSON API
我正在嘗試通過向帶有 ID 的請求發送請求,以 JSON 格式從谷歌工作表中檢索數據,以便我取回該 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.');
}
}
為了解決您的問題,您必須更改您的功能productQuery 、 formatProduct和doGet 。
根據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。
通過 ID 檢索單個項目:
https://script.google.com/.../exec?action=1&prodid=g123
回應:
{"products":[{"ID":"g123","Name":"First Rec","Price":20,"Stock":35}]}
檢索具有重復 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}]}
檢索不同的項目:
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.