【问题标题】:How do I JSON.parse an array in a Zapier Trigger?如何 JSON.parse Zapier 触发器中的数组?
【发布时间】:2016-07-22 17:14:16
【问题描述】:

我正在尝试 JSON.parse 数组“数据”。我需要能够将数组作为根传递。

{
  "data": [
    {
      "type": "name",
      "id": "123"
    }
  ]
}

响应应该看起来像这样,只包含对象。 Zapier 似乎不适用于数组。

{
      "type": "name",
      "id": "123"
}

难道我不能使用简单的脚本来完成工作吗?


编辑:

基本上,您需要在脚本中覆盖post_poll 方法(https://zapier.com/developer/documentation/v2/scripting/#polling),以便拦截API 的响应。之后,您只需要返回一个具有所需值的新对象。无需返回:{"data":[ {...}, {...}, ]},您只需返回 data 的值。比如:

xyz_post_poll: function(bundle){
  var response = JSON.parse(bundle.response.content);
  return response.data || [];
}

【问题讨论】:

  • 我对 Zapier 不熟悉,您本质上是在要求一个以您的 json 开头并返回该对象的函数吗?

标签: javascript arrays json polling zapier


【解决方案1】:

我发现我需要调用 JSON.parse()JSON.stringify() 才能让它工作。假设我的输入作为 (key,value) 放入 Zapier,其中 key = data 和 value 是:

[{"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"}

【讨论】:

    【解决方案2】:

    是的,您可以使用简单的脚本、Javascript 或 Python。单击现有 Trigger 和 Action 之间的 +,然后添加一个 Action,选择 Code by Zapier 作为应用程序。假设您的 JSON 是触发器的输出:

    {
      "data": [
        {
          "type": "name",
          "id": "123"
        }
      ]
    }
    

    Zapier 的代码将为您提供以下选项:

    Setup Code by Zapier Run Javascript

    如果对象数组data 包含多个元素,则Zapier 将这些对象中属性type 的所有值显示为标记为数据类型的数组> 以及属性 id 的所有值作为标记为 数据 ID 的数组。如果您选择typeid 作为要传递给代码应用程序的input 对象的属性名称,那么您的代码获得的Javascript 对象是这样的:

    input = {
     type: [ "name", "name2", "name3" ],
     id: [ "123", "456", "789" ]
    };
    

    然后,您的代码可以在传递到下一个 Action 之前以任何您想要的方式转换数据。

    Code by Zapier,

    【讨论】:

    • 虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接答案可能会失效。 - From Review
    • 编辑原始帖子就是为了做到这一点。感谢您的建设性建议。
    【解决方案3】:

    如果您正在谈论使用 Zapier JavaScript 引擎的 Zapier 代码解析它,那么您可以这样做:

    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"
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2017-11-30
      • 2019-01-09
      • 2018-09-05
      • 2022-08-02
      • 2017-10-23
      • 2017-09-25
      • 2018-02-10
      • 2015-12-10
      • 2021-01-08
      相关资源
      最近更新 更多