Zapier - сортировка входных данных - PullRequest
0 голосов
/ 30 апреля 2018

Вот что происходит:

Я использую очень крутой плагин в своем магазине Shopify, который позволяет настроить ваш продукт, выполнив последовательность шагов.

Для иллюстрации enter image description here

Проблема в том, что вся эта информация не сортируется для Zapier. По сути это выглядит так:

выпуск enter image description here

Они представляются как «Значения свойств позиций» и «Имена свойств позиций», а при вставке они представляются в виде массива.

Что мне нужно сделать, это сопоставить эти имена с их значениями. И, если возможно, сможет выбрать в графическом интерфейсе Zapier.

Таким образом, вместо этих полей и значений

"Line Properties Names" -> "Project Title","Project Description","Ebook Type"....

"Line Items Properties Values" -> "Sherlock Holmes","A story in London..", "Standard Book"...

Имея эти поля и значения:

"Project Title" -> "Sherlock Holmes"
"Project Description" -> "A story in London.."
"Ebook Type" -> "Standard Ebook"

Возможно ли это?

Спасибо, что уделили время

UPDATE

Для уточнения

Итак, в этом заказе есть 3 разных товара. Разделены по []. Значения в продукте могут различаться, например, если клиент решит не заполнять поле «Сведения о проекте», то ключи и сведения о проекте не будут отображаться. В результате получается продукт с разным количеством ключей и значений.

Вот пример: (Как видите, у первого товара другой набор значений, как у второго товара)

Входные данные

Input data Values: ["1","ebook1524837342394","Ebook~~//www.shappify-cdn.com/images/282516/127828455/001_Ebook Technical 325x325 (1).png~~ebook","Technical Ebook","Technical 15K - $450.00","All Inclusive Package - $149.00","Cookbook Instant Pot"],["ebook1524837342394"],["Detective Story based in London......","Sherlock Holmes","No Addons","No Package","10000 Words - $270.00","Fiction Book","Ebook~~//www.shappify-cdn.com/images/282516/127828453/001_Ebook Standard 325x325.png~~ebook","ebook1524837304725","1","https://cdn.shopify.com/s/files/1/0012/8814/2906/uploads/7ddee14d6e5d6c5e4396981d1702c375.jpg"]

 Input data Keys: ["_master_builder","_builder_id","_builder_info","Ebook Type","Word Count","Upgrade","Project Title"],["_builder_id"],["Project Details","Project Title","Addons","Upgrade","Word Count","Ebook Type","_builder_info","_builder_id","_master_builder","Upload your file here"]

Что я хочу сделать

Я хочу сопоставить ключ с его значением и выбрать его в графическом интерфейсе Zapier.

Токовый выход с предложенным кодом

Выход 1-я часть

Выход 2-й части

Выход 3-й части

Выход 4-й части

Ожидаемый результат

[{"_master_builder":"1","_builder_id":"ebook1524837342394","_builder_info":"Ebook~~//www.shappify-cdn.com/images/282516/127828455/001_Ebook Technical 325x325 (1).png~~ebook"...}]

Ценю вашу помощь, ребята

Ответы [ 2 ]

0 голосов
/ 02 мая 2018

Ах! Так что это немного сложнее, чем казалось на первый взгляд, но это не плохо. Есть две ошибки:

  • Ваши данные поступают в виде строки
  • эта строка состоит из нескольких объектов массива, но сама по себе не является допустимым объектом массива

Так что, как только мы разберемся правильно, это не так уж плохо.

// just used for testing outside zapier
// these are comma separated strings
const inputData = {
  keys: '_master_builder,_builder_id,_builder_info,Ebook Type,Word Count,Upgrade,Project Title,_builder_id,Project Details,Project Title,Addons,Upgrade,Word Count,Ebook Type,_builder_info,_builder_id,_master_builder,Upload your file here',
  values: '1,ebook1524837342394,Ebook~~//www.shappify-cdn.com/images/282516/127828455/001_Ebook Technical 325x325 (1).png~~ebook,Technical Ebook,Technical 15K - $450.00,All Inclusive Package - $149.00,Cookbook Instant Pot,ebook1524837342394,Detective Story based in London......,Sherlock Holmes,No Addons,No Package,10000 Words - $270.00,Fiction Book,Ebook~~//www.shappify-cdn.com/images/282516/127828453/001_Ebook Standard 325x325.png~~ebook,ebook1524837304725,1,https://cdn.shopify.com/s/files/1/0012/8814/2906/uploads/7ddee14d6e5d6c5e4396981d1702c375.jpg'
}

// arrays must be the same length
const zipArrays = (a, b) => {
  let res = {}
  a.forEach((val, i) => {
    res[val] = b[i]
  })
  return res
}

// have to convert strings to actual arrays
// this will blow up if any of the data has commas in it
const keys = inputData.keys.split(',')
const vals = inputData.values.split(',')

// now we have real arrays

const result = {}

// copy keys onto the result, overwriting old ones
Object.assign(result, zipArrays(keys, vals))

console.log(result)
/*
  { _master_builder: '1',
    _builder_id: 'ebook1524837304725',
    _builder_info: 'Ebook~~//www.shappify-cdn.com/images/282516/127828453/001_Ebook Standard 325x325.png~~ebook',
    'Ebook Type': 'Fiction Book',
    'Word Count': '10000 Words - $270.00',
    Upgrade: 'No Package',
    'Project Title': 'Sherlock Holmes',
    'Project Details': 'Detective Story based in London......',
    Addons: 'No Addons',
    'Upload your file here': 'https://cdn.shopify.com/s/files/1/0012/8814/2906/uploads/7ddee14d6e5d6c5e4396981d1702c375.jpg' }
*/

// return result

Как есть, много повторяющихся клавиш, поэтому вывод меньше, чем ввод. Вы также можете настроить этот код, чтобы он лучше соответствовал вашему вводу, если вы хотите сгруппировать вывод по-другому.

Надеюсь, это поможет!

0 голосов
/ 30 апреля 2018

Это должно быть возможно с помощью for цикла. Попробуй это.

В вашем примере определите первое поле как значения, а второе - как ключи. Удалите строки var inputData... перед выполнением шага кода.

var inputData = {"keys": ["First", "Second", "Third"],
                "values": ["One", "Two", "Three"]
                };
//Remove the lines above before pasting in the Code step. 
//You will need to configure it in the Zap.

var product = {};
for (var i = 0; i < inputData.keys.length; i++) {
  var commonkey = inputData.keys[i];
  product[commonkey] = inputData.values[i];
}
console.log(JSON.stringify([product]));
   
// already available in the zapier scope
output = [product]
...