Zapier - Catch Hook - JSON Array - 遍历数组中的每个项目

Zapier - Catch Hook - JSON Array - Loop over each item in array

我需要使用 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 循环并做一些事情,例如,将数据插入 sheet 数组中的所有项目?我知道 "Code" 操作,我选择了 JavaScript,我可以解析出字符串,但这似乎效率不高。另外,在现实中,JSON数组里面的对象中会有很多数据。

编辑:已解决!回答如下

所以,第一部分是Catch Raw Hook一个触发器。这是正常的 "Webhooks",但您必须单击才能显示不太常见的变体。使用 Catch Raw Hook,您的数据将不会通过 Zapier 应用程序自动转换为变量,您将拥有原始 JSON 数据。

一旦你有了原始 JSON,在我的例子中,你将有一个动作,这将是 "Code" 动作。我正在使用 JavaScript。在我的模板中,我正在抓取整个 JSON 字符串(您整个导入的 JSON 现在是一个字符串,而不是一个对象,所以我们不能使用 "."(点)符号来访问它的部分)。

您需要 JSON.parse() 代码中的字符串。但首先,让我解释一下 Zapier 有一个名为 inputData 的预定义变量,您将在代码中使用它。然后在 "Code" Action 的 "Edit Template" 部分的顶部,你会看到你可以命名你导入的 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 中 "Code" 的下一件重要事情是,要将您的东西拿出来,您 return。因此,在接下来的几行中,我将 return 一个 .map 函数,该函数 return 数组中的每个项目。很难理解 Zapier 如何处理这个问题,但它实际上会在您每次在该 .map 中循环时运行您创建的下一个 "Action"(例如,向 sheet 添加一行)。那么,让我们往下看:

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

如果您还记得的话,我在原始问题中列出的原始 JSON 中有一个名为 "data" 的数组。它将遍历该数组,因为我正在 returning,所以它将为每个循环执行 "Add Row to Sheet"(在我的例子中),因此,将我的所有数据作为多行插入我的传播sheet。

所以完成的代码:

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

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