我正在尝试JSON.parse数组“数据”。我需要能够将数组作为根传递。
{
"data": [
{
"type": "name",
"id": "123"
}
]
}
响应应该看起来像只包含对象。 Zapier似乎不适合使用数组。
{
"type": "name",
"id": "123"
}
我不应该使用简单的脚本来完成工作吗?
编辑:
基本上,您将要在脚本中覆盖post_poll
方法(https://zapier.com/developer/documentation/v2/scripting/#polling),以便您可以拦截API的响应。之后,您只需要返回一个包含所需值的新对象。而不是返回:{“data”:[{...},{...},]},您只需要返回数据的值。就像是:
xyz_post_poll: function(bundle){
var response = JSON.parse(bundle.response.content);
return response.data || [];
}
是的,您可以使用简单的脚本,Javascript或Python。单击现有Trigger和Action之间的+,然后添加一个Action,选择Zapier的Code作为应用程序。假设您的JSON是Trigger的输出:
{
"data": [
{
"type": "name",
"id": "123"
}
]
}
Zapier的代码会为您提供以下选项:
Setup Code by Zapier Run Javascript
如果对象数组data
具有多个元素,则Zapier将这些对象中属性type
的所有值显示为标记为Data Type的数组,将属性id
的所有值显示为标记为Data ID的数组。如果您选择type
和id
作为要传递给Code应用程序的input
对象的属性名称,那么您的代码获取的Javascript对象是:
input = {
type: [ "name", "name2", "name3" ],
id: [ "123", "456", "789" ]
};
然后,您的代码可以以任何方式转换数据,然后再转到下一个Action。
我发现我需要调用JSON.parse()
和JSON.stringify()
以使其工作。假设我的输入被放在Zapier中作为(键,值),其中key = data,值为:
[{"type": "name", "id":"123"}, {"type": "name2", "id":"456"},
{"type": "name3", "id":"789" }]
我的代码:
output = {};
var obj = JSON.parse(input.data);
for (var i = 0; i < obj.length; i++) {
output["myObject"+i] = JSON.stringify(obj[i]);
}
生成的输出是:
myObject0: {"type":"name", "id":"123"}
myObject1: {"type":"name2", "id":"456"}
myObject2: {"type":"name3", "id":"789"}
如果您正在谈论解析它使用Zapier的Code By Zapier JavaScript引擎,那么这就是您所做的:
Zapier返回你告诉它的任何对象,所以假设你使用他们的标准名称为input
,这就是你做的:
output = {};
for (var i = 0; i < input["data"].length; i++) {
output["myObject"+str(i)] = input.data[i];
}
这应该返回一个名为output
的对象,如下所示:
"output" : {
"myObject0" : {
"type": "name",
"id": "123"
},
"myObject1" : {
"type" : "name",
"id": "124"
}
}