Получить значение объекта в массиве JSON с помощью скрипта Google Apps (WooCommerce Webhook) - PullRequest
0 голосов
/ 06 апреля 2020

У меня есть интернет-магазин WooCommerce, который отправляет созданные заказы в электронную таблицу Google с помощью веб-крюка. Мне удалось заставить его работать, за исключением одного (решающего) шага: мне кажется, что я не могу правильно провести метаданные позиций.

Чтобы дать немного больше контекста здесь: это интернет-магазин, который продает торты и пироги и т. Д. c (позиции). В одном заказе может быть несколько продуктов, и каждый продукт может иметь несколько метаданных. Например: Продукт (позиция): торт, метаданные: размер торта (ключ): (значение) маленький, (ключ) текст на торте: (значение) синий текст, (ключ) текст на тексте торта: «Hello World» (ценность).

Что мне нужно сделать, это следующий пример заказа в электронной таблице (упрощенно):

Имя, адрес электронной почты, дата получения, время получения, место получения, заказ

Джо Олень, joe@deer.com, 10/10/2020, 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"
    },

Чего я (считаю, что я) должен достичь, это добавить al oop в l oop, который перебирает метаданные объекта line_items. Однако, я попробовал это (используя код ниже), но не смог заставить его работать.

    //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]);

}

Не могли бы вы, ребята, помочь мне с частью для l oop? Я искренне надеюсь, что разъяснил свой вопрос. Если у вас есть дополнительные вопросы, пожалуйста, дайте мне знать!

1 Ответ

1 голос
/ 06 апреля 2020

Вот al oop, который перебирает метаданные объекта line_items на основе предоставленного вами кода.

  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;

  }
...