Zapier 将对象数组分解为包含对象键的不同数组

Zapier breaks down arrays of objects into distinct arrays containing the keys of the objects

大家好,我对 zapier (javascript) 的代码有疑问...(我知道,我知道)

我遇到的问题是我从 airtable 导入数据。数据以三个不同的数组形式出现。他们是:

specCategory[]
specName[]
specDescription[]

我遍历数组并用数组中的逗号将它们分开。然后,我将每个数组中的每个值都形成它们自己的对象。然后我将该对象推入一个数组。

我的最终目标是以以下形式将 JSON 有效负载推送到 PDFMonkey:

{
    "payload": [
        {
            specName: "specName data",
            specCategory: "specCategory data",
            specDescription: "specDescription data"
        },
        {
            specName: "specName data",
            specCategory: "specCategory data",
            specDescription: "specDescription data"
        },
        {
            specName: "specName data",
            specCategory: "specCategory data",
            specDescription: "specDescription data"
        }
    ]
}

Zapier 似乎 return 对我来说是正确的负载。即对象数组。但是,当我在后续步骤中访问数据时,数据再次 return 返回到三个不同的数组中。

zapier 代码的输出如下所示。

specArray
1
specCategory
Kitchen Appliances
specName
Gas Hob
specDescription
Westinghouse WHG 643 SA Gas Hob
2
specCategory
Kitchen Appliances
specName
Range Hood
specDescription
Westinghouse WRR 614 SA Range Hood
3
specCategory
Kitchen Appliances
specName
Oven
specDescription
Westinghouse WVE 613 S Oven
4
specCategory
Doors and Windows (Internal)
specName
Architraves
specDescription
42X12min Splayed Profile F/Joint Pine painted gloss
5
specCategory
External Stairs
specName
External Stair Balustrade
specDescription
Painted pre-primed ladies waist handrail with slats and bottom rails (not included if stair is under 1m in height)

相反,在后续步骤中访问它时,我收到三个不同的数组,例如:

specArraySpecName: specName[1],specName[2],specName[...],
specArraySpecCategory: specCategory[1],specCategory[2],specCategory[...],
specArraySpecDescription: specDescription[1],specDescription[2],specDescription[...]

这是我的代码,您可以看一下我的做法是否有误。当我尝试只输出对象数组(而不是首先将数组包装在对象标签中)时,它会输出每个对象的单个值,但问题是每次使用每个对象作为输入时,zapier 都会循环后续步骤。

有没有办法扁平化或字符串化我尝试创建的 JSON 对象?

我下面的代码供参考:

// this is wrapped in an async function
// you can use await throughout the function
    
let categories = inputData.specCategories.split(/\s*,\s*/);
let names = inputData.specName.split(/\s*,\s*/);
let descriptions = inputData.specDescriptions.split(/\s*,\s*/);
    
let specArray = [];
    
// for loop to input each of the discrete items into an array
for (let i = 0; i < categories.length; i++) {
    let spec = {
        specCategory: categories[i], 
        specName: names[i], 
        specDescription: descriptions[i]
        specArray.push(spec); 
    }   
    output = { specArray };

我提前为格式道歉但堆栈溢出不会让我 post 代码块由于一些格式不正确的代码(试过 ctrl + k,4 space,三重回勾等) 我想不通。

感谢您的帮助!

好问题!值得一提的是,这是 Zapier“按预期工作”......对于与您的用例不匹配的用例。此行为支持 line items,会计与电子商务中的常见结构。但是,这对您没有帮助,但您希望 Zapier 停止扰乱您结构良好的价值观。

处理此问题的最佳方法可能是将整个 JSON 字符串化。 Zapier 只会破坏数组,所以它会留下一个 JSON 字符串不受伤害。

代码中应该是这样的:

// ...
output = { result: JSON.stringify(specArray) };

运气好的话,您将能够在 PDFMonkey 的正文字段中使用该有效负载,并且它会正确处理!

但是,这就是我在 Zapier 步骤之间共享 JSON 以保持其完好无损的方式。