【问题标题】:Zapier breaks down arrays of objects into distinct arrays containing the keys of the objectsZapier 将对象数组分解为包含对象键的不同数组
【发布时间】:2021-07-12 20:57:26
【问题描述】:

大家好,我对 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 似乎为我返回了正确的有效负载。也就是说,一个对象数组。但是,当我在后续步骤中访问数据时,数据会再次返回到三个不同的数组中。

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 };

我提前为格式化道歉,但由于一些格式不正确的代码(尝试 ctrl + k、4 个空格、三次反引号等),堆栈溢出不允许我发布代码块,我无法弄清楚。

感谢您的帮助!

【问题讨论】:

    标签: javascript arrays javascript-objects zapier


    【解决方案1】:

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

    处理这个问题的最佳方法可能是将整个 JSON 字符串化。 Zapier 只会破坏数组,因此它不会损坏 JSON 字符串。

    在代码中应该是这样的:

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

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

    但是,这就是我在 Zapier 步骤之间共享 JSON 以保持其不受破坏的方式。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-12-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-15
      • 2022-12-18
      • 2015-01-03
      相关资源
      最近更新 更多