Zapier-抓钩-JSON数组-遍历数组中的每个项目

时间:2018-09-20 21:03:02

标签: javascript json zapier

我需要使用Zapier Webhook接收一些传入的JSON数据,该数据包含一个项目数组,对该数组进行循环并为每个元素执行操作。

以下是传入的JSON数据的示例:

    {
            "first_name": "Bryan",
            "last_name": "Helmig",
            "age": 27,
            "data": [
                {
                    "title": "Two Down, One to Go",
                    "type": "Left"
                },
                {
                    "title": "Talk the Talk",
                    "type": "Right"
                },
                {
                    "title": "Know the Ropes",
                    "type": "Top"
                }
            ]
    }

数组的大小将是动态的。

问题是,当我在挂钩中导入此数据时,它给了我

data
    title: Two Down, One to Go
    type: Left
    title: Talk the Talk
    type: Right
    title: Know the Ropes
    type: Top

因此,基本上说data只是所有这些东西的大串。

有人可以帮我弄清楚是否有可能对此进行Zap循环并执行一些操作,例如,将数据插入到工作表中,以便对数组中的项进行检查吗?我知道“代码”操作,因此我选择了JavaScript,可以解析该字符串,但这似乎效率不高。另外,实际上,JSON数组中的对象中将有很多数据。

编辑:已解决!下面的答案

1 个答案:

答案 0 :(得分:2)

因此,第一部分是进入Catch Raw Hook进行触发。这是正常的“ Webhooks”,但是您必须单击以显示不太常见的变体。使用 Catch Raw Hook ,您的数据将不会通过Zapier应用自动转换为变量,您将获得原始JSON数据。

一旦有了原始的JSON,就我而言,您将有一个动作,这就是“代码”动作。我正在使用JavaScript。在我的模板中,我正在获取整个JSON字符串(您现在导入的整个JSON是一个字符串,而不是对象,因此我们不能使用“ ”(点)表示法来访问部件的)。

您需要JSON.parse()代码中的字符串。但是首先,让我解释一下Zapier有一个预定义变量inputData,您将在代码中使用它。然后,在“代码” Action 的“编辑模板”部分的顶部,您将看到可以命名导入的JSON字符串的变量。

现在有趣的部分!在代码中,您将输入:

// of course, you can change the variables to what you want
// but 'inputData' is unique, can't change that
const myData = JSON.parse(inputData.rawJsonData); 

所以,我的原始数据是一个字符串,它还不是JSON,因此这行代码使其成为JSON对象。现在,作为对象,我们可以在它或.map上循环或访问“ this.that”或您想要的任何对象。

关于Zapier中“代码”的下一个要提到的重要事情是,return是您的工作之选。因此,在接下来的几行中,我将返回一个.map函数,该函数返回数组中的每个项目。很难掌握Zapier的处理方式,但是实际上,每次在该.map中循环执行时,它实际上都会运行您创建的下一个“动作”(例如,在工作表中添加一行)。因此,让我们在下面看看:

return myData.data.map(item => {
    return item;
});

如果您还记得的话,我在原始问题中列出的原始JSON中有一个名为“ data”的数组。它将遍历该数组,并且由于我正在return进行操作,因此它将为每个循环执行“将行添加到工作表”(以我为例),因此,将所有数据作为多行插入到我的电子表格。

因此,完成的代码:

const myData = JSON.parse(inputData.rawJsonData);

return myData.data.map(item => {
    return item; 
});