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”的数组。它将遍历该数组,并且由于我是return
ing,因此它将为每个循环执行“将行添加到工作表”(在我的情况下),因此,将我的所有数据作为多行插入到我的电子表格中。
所以完成的代码:
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 数组 - 遍历数组中的每个项目的主要内容,如果未能解决你的问题,请参考以下文章
从 PHP Curl 获取 POST Zapier webhook 响应
Zapier CLI,在 inputFields 上使用选项在创建新 Zap 时不会在表单中显示