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

Posted

技术标签:

【中文标题】Zapier - Catch Hook - JSON 数组 - 遍历数组中的每个项目【英文标题】:Zapier - Catch Hook - JSON Array - Loop over each item in array 【发布时间】:2019-02-25 05:56:06 【问题描述】:

我需要使用 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 数组内的对象中会有很多数据。

编辑:已解决!下面回答

【问题讨论】:

对于通过搜索来到这里的一些人来说,这个替代方案会很有趣——如果你不做“catch raw”,Zapier will parse the incoming fields, 并允许你将这些项目格式化为(任意数量) Zap 步骤。 【参考方案1】:

所以,第一部分是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”的数组。它将遍历该数组,并且由于我是returning,因此它将为每个循环执行“将行添加到工作表”(在我的情况下),因此,将我的所有数据作为多行插入到我的电子表格中。

所以完成的代码:

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

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

【讨论】:

我在 may zap 上使用了这个,但它不像你提到的那样工作。相反,它会将这两个项目都作为一个对象返回,因此如果您尝试将它们拉到一个 zap 中,则会出错,因为它只能看到一个字符串。还是 zap 需要说它支持多次返回? 我与 Zapier 合作已经有一年了,所以他们可能会改变一些事情。您使用的是Catch Raw Hook 对吗?然后const myData = JSON.parse(inputData.rawJsonData);?然后,您可以运行其他 JavaScript 内容。 是的,我完全按照您的方式设置了它,我看到其他人过去做过类似的事情,但他们的选项都不再具有此功能。这是您的代码现在作为 zapier 变量提供的示例输出:(SomeDataDescription:“item1Sample,item2Sample”)。因此,下一步将其作为订单项进行抓取。 是的,可能已经更新了。我强烈建议您联系 Zapier 支持,他们很棒而且很友好。否则,旧方法是如果您选择获取原始数据,则必须解析出一串 JSON 数据。 找到它,该功能已被删除,并创建了一个 zap 以在 google 工作表中添加多行。这是一种耻辱,因为在我们可以完成这段代码之前,它可以在任何后续的 zap 上工作。但是,您的代码仍然可以解析数据并返回一个订单项数组。

以上是关于Zapier - Catch Hook - JSON 数组 - 遍历数组中的每个项目的主要内容,如果未能解决你的问题,请参考以下文章

Zapier REST订阅挂钩无法在Php中解析[重复]

$.post 到 Zapier webhook

从 PHP Curl 获取 POST Zapier webhook 响应

Zapier CLI,在 inputFields 上使用选项在创建新 Zap 时不会在表单中显示

Zapier 打开 exe / Zapier 代码打开打开 exe 的 javascript

如果没有得到任何想要的数据从我的服务器发送到 zapier,应该向 zapier 发送啥响应