使用 Google Apps 脚本(WooCommerce Webhook)获取 JSON 数组中的对象值
Obtain object valus in a JSON array with Google Apps Script (WooCommerce Webhook)
我有一个 WooCommerce 网上商店,它使用 webhook 将创建的订单发送到 Google 电子表格。除了一个(关键的)步骤外,我设法让它工作:我似乎无法正确地遍历订单项的元数据。
在这里提供更多背景信息:它是一家销售蛋糕和馅饼等(订单项)的网上商店。一个订单可以有多个产品,每个产品可以有多个元数据。例如:产品(订单项):蛋糕,元数据:蛋糕(键)大小:(值)小,(键)蛋糕上的文字:(值)蓝色文字,(键)蛋糕上的文字文字:"Hello World" (价值)。
我需要实现的是电子表格中顺序的以下示例(简化):
姓名、邮箱、取件日期、取件时间、取件地点、订单
乔鹿,joe@deer.com,2020 年 10 月 10 日,10:00,面包店,1 个红色天鹅绒蛋糕,小蛋糕,蛋糕上的蓝色文字,"Hello World"。 1 x 海龟蛋糕,大蛋糕,蛋糕上没有文字。
请在下方找到 JSON 对象的示例以了解概览。对象的名称是 myData,因此可以使用 myData.line_items 访问行项目。
"line_items": [
{
"id": 61458,
"name": "Cupcake Mix 12 stuks",
"product_id": 627,
"variation_id": 0,
"quantity": 1,
"tax_class": "gereduceerd-tarief",
"subtotal": "27.52",
"subtotal_tax": "2.48",
"total": "27.52",
"total_tax": "2.48",
"taxes": [
{
"id": 2,
"total": "2.477064",
"subtotal": "2.477064"
}
],
"meta_data": [
{
"id": 540340,
"key": "Vanilla Buttercream Cupcake",
"value": "yes"
},
{
"id": 540341,
"key": "Vanilla Confetti Cupcake",
"value": "yes"
},
我(相信我)需要实现的是在循环中添加一个循环,循环遍历 line_items 对象的 meta_data。但是,我试过了(使用下面的代码),但无法正常工作。
//this is a function that fires when the webapp receives a GET request
function doGet(e) {
return HtmlService.createHtmlOutput("request received");
Logger.log('GET received at: ' + timestamp);
}
//this is a function that fires when the webapp receives a POST request
function doPost(e) {
var myData = JSON.parse([e.postData.contents]);
var order_number = myData.number;
var order_created = myData.date_created;
var order_status = myData.status;
var product_name = myData.line_items[0].name;
var product_qty = myData.line_items[0].quantity;
var product_total = myData.line_items[0].total;
var order_total = myData.total;
var billing_email = myData.billing.email;
var billing_first_name = myData.billing.first_name;
var billing_last_name = myData.billing.last_name;
var payment_method = myData.payment_method_title;
var shipping_method = myData.shipping_lines[0].method_title;
var pick_up_location = myData.meta_data[0]["value"];
var pick_up_date = myData.meta_data[1]["value"];
var pick_up_time = myData.meta_data[2]["value"];
var pick_up_time_array = pick_up_time.split(" - ");
var pick_up_time_start = pick_up_time_array[0];
var pick_up_time_end = pick_up_time_array[1];
var shipping_total = myData.shipping_lines[0].total;
var lineitems=""
for (i in myData.line_items)
{
var product_name = myData.line_items[i].name;
var itemName = myData.line_items[i].name;
var quantity = myData.line_items[i].quantity;
for (j in myData.line_items[1][j]) {
var decorationitems = "Item: " + myData.line_items[1][j].key + " Optie: " + myData.line_items[1][j].value + '\n';
var decoration = decoration+decorationitems;
}
var product_items = quantity + " x " + itemName + '\n' + decoration + '\n';
var lineitems = lineitems+product_items;
}
var timestamp = new Date();
var sheetActive = SpreadsheetApp.openById("<ID>");
var sheet = sheetActive.getSheetByName("<NAME>");
sheet.appendRow([timestamp,order_number,order_created,product_name,product_qty,product_total,order_total,billing_email,billing_first_name,billing_last_name,payment_method,shipping_method,pick_up_location,pick_up_date,pick_up_time,pick_up_time_start,pick_up_time_end,shipping_total,lineitems]);
}
你们能帮我解决for循环的部分吗?我真诚地希望我把我的问题说清楚了。如果您还有其他问题,请告诉我!
根据您提供的代码,这是一个遍历 line_items 对象的 meta_data 的循环。
var lineitems="";
var decoration = "";
for (var i in myData.line_items)
{
var product_name = myData.line_items[i].name;
var itemName = myData.line_items[i].name;
var quantity = myData.line_items[i].quantity;
var metaData = myData.line_items[i].meta_data;
for (var j in metaData)
{
for (var key in metaData[j])
{
var decorationitems = "Item: " + key + " Optie: " + metaData[j][key] + '\n';
decoration = decoration + decorationitems;
}
}
var product_items = quantity + " x " + itemName + '\n' + decoration + '\n';
lineitems = lineitems + product_items;
}
我有一个 WooCommerce 网上商店,它使用 webhook 将创建的订单发送到 Google 电子表格。除了一个(关键的)步骤外,我设法让它工作:我似乎无法正确地遍历订单项的元数据。
在这里提供更多背景信息:它是一家销售蛋糕和馅饼等(订单项)的网上商店。一个订单可以有多个产品,每个产品可以有多个元数据。例如:产品(订单项):蛋糕,元数据:蛋糕(键)大小:(值)小,(键)蛋糕上的文字:(值)蓝色文字,(键)蛋糕上的文字文字:"Hello World" (价值)。
我需要实现的是电子表格中顺序的以下示例(简化):
姓名、邮箱、取件日期、取件时间、取件地点、订单
乔鹿,joe@deer.com,2020 年 10 月 10 日,10:00,面包店,1 个红色天鹅绒蛋糕,小蛋糕,蛋糕上的蓝色文字,"Hello World"。 1 x 海龟蛋糕,大蛋糕,蛋糕上没有文字。
请在下方找到 JSON 对象的示例以了解概览。对象的名称是 myData,因此可以使用 myData.line_items 访问行项目。
"line_items": [
{
"id": 61458,
"name": "Cupcake Mix 12 stuks",
"product_id": 627,
"variation_id": 0,
"quantity": 1,
"tax_class": "gereduceerd-tarief",
"subtotal": "27.52",
"subtotal_tax": "2.48",
"total": "27.52",
"total_tax": "2.48",
"taxes": [
{
"id": 2,
"total": "2.477064",
"subtotal": "2.477064"
}
],
"meta_data": [
{
"id": 540340,
"key": "Vanilla Buttercream Cupcake",
"value": "yes"
},
{
"id": 540341,
"key": "Vanilla Confetti Cupcake",
"value": "yes"
},
我(相信我)需要实现的是在循环中添加一个循环,循环遍历 line_items 对象的 meta_data。但是,我试过了(使用下面的代码),但无法正常工作。
//this is a function that fires when the webapp receives a GET request
function doGet(e) {
return HtmlService.createHtmlOutput("request received");
Logger.log('GET received at: ' + timestamp);
}
//this is a function that fires when the webapp receives a POST request
function doPost(e) {
var myData = JSON.parse([e.postData.contents]);
var order_number = myData.number;
var order_created = myData.date_created;
var order_status = myData.status;
var product_name = myData.line_items[0].name;
var product_qty = myData.line_items[0].quantity;
var product_total = myData.line_items[0].total;
var order_total = myData.total;
var billing_email = myData.billing.email;
var billing_first_name = myData.billing.first_name;
var billing_last_name = myData.billing.last_name;
var payment_method = myData.payment_method_title;
var shipping_method = myData.shipping_lines[0].method_title;
var pick_up_location = myData.meta_data[0]["value"];
var pick_up_date = myData.meta_data[1]["value"];
var pick_up_time = myData.meta_data[2]["value"];
var pick_up_time_array = pick_up_time.split(" - ");
var pick_up_time_start = pick_up_time_array[0];
var pick_up_time_end = pick_up_time_array[1];
var shipping_total = myData.shipping_lines[0].total;
var lineitems=""
for (i in myData.line_items)
{
var product_name = myData.line_items[i].name;
var itemName = myData.line_items[i].name;
var quantity = myData.line_items[i].quantity;
for (j in myData.line_items[1][j]) {
var decorationitems = "Item: " + myData.line_items[1][j].key + " Optie: " + myData.line_items[1][j].value + '\n';
var decoration = decoration+decorationitems;
}
var product_items = quantity + " x " + itemName + '\n' + decoration + '\n';
var lineitems = lineitems+product_items;
}
var timestamp = new Date();
var sheetActive = SpreadsheetApp.openById("<ID>");
var sheet = sheetActive.getSheetByName("<NAME>");
sheet.appendRow([timestamp,order_number,order_created,product_name,product_qty,product_total,order_total,billing_email,billing_first_name,billing_last_name,payment_method,shipping_method,pick_up_location,pick_up_date,pick_up_time,pick_up_time_start,pick_up_time_end,shipping_total,lineitems]);
}
你们能帮我解决for循环的部分吗?我真诚地希望我把我的问题说清楚了。如果您还有其他问题,请告诉我!
根据您提供的代码,这是一个遍历 line_items 对象的 meta_data 的循环。
var lineitems="";
var decoration = "";
for (var i in myData.line_items)
{
var product_name = myData.line_items[i].name;
var itemName = myData.line_items[i].name;
var quantity = myData.line_items[i].quantity;
var metaData = myData.line_items[i].meta_data;
for (var j in metaData)
{
for (var key in metaData[j])
{
var decorationitems = "Item: " + key + " Optie: " + metaData[j][key] + '\n';
decoration = decoration + decorationitems;
}
}
var product_items = quantity + " x " + itemName + '\n' + decoration + '\n';
lineitems = lineitems + product_items;
}