Zapier-将数据添加到JSON响应(应用开发)

时间:2019-01-31 19:49:51

标签: zapier zapier-cli

我们正在创建一个Zapier应用程序以向公众公开我们的API,因此任何人都可以使用它。人们使用的主要端点返回一个非常大且复杂的JSON对象。 Zapier看起来很难解析嵌套的复杂JSON。但这对于一个非常简单的响应对象(如

)而言确实很棒

{“字段”:“值”}

我们返回的数据具有这种结构,我们希望将某些字段移至响应的根,以便Zapier可以轻松对其进行解析。

"networkSections": [
    {
        "identifier": "Deductible",
        "label": "Deductible",
        "inNetworkParameters": [
            {
                "key": "Annual",
                "value": " 600.00",
                "message": null,
                "otherInfo": null
            },
            {
                "key": "Remaining",
                "value": " 600.00",
                "message": null,
                "otherInfo": null
            }
        ],
        "outNetworkParameters": null
    },

那么,我们可以做些什么来退还剩余的免赔额吗?

我已经走了这么远(添加outputFields),但这返回了一个值数组。我不确定如何在Zap或App中解析该数组。

 {key: 'networkSections[]inNetworkParameters[]key', label: 'xNetworkSectionsKey',type: 'string'},

即返回“年度”,“剩余”等的数组

2 个答案:

答案 0 :(得分:2)

很好的问题。在这种情况下,发生了很多事情,outputFields不能完全解决所有问题。 :(

在您的示例中,inNetworkParameters包含对象数组。在整个文档中,我们将其称为line items。这些订单项可以传递给其他操作,但是不同的预期结构会带来一些问题。我们处理此问题的方法是让用户按字段将一个步骤的输出的行项目映射到另一步骤的输入。因此,如果第1步返回

{
  "some_array": [
    {
      "some_key": "some_value"
    }
  ]
}

下一步需要发送

{
  "data": [
    {
      "some_other_key": "some_value"
    }
  ]
}

用户可以通过将some_array.some_key映射到data.some_other_key来实现。

所有这些,如果您想始终返回Remaining Deductible对象,则必须通过修改结果对象本身来实现。只要这些数据始终保持相同的顺序,您就可以执行类似

的操作
var data = z.JSON.parse(bundle.response.content);
data["Remaining Deductible"] = data.networkSections[0].inNetworkParameters[1].value;
return data;

如果顺序不同,则必须执行某种搜索以找到要返回的对象。

我希望所有的帮助!

答案 1 :(得分:1)

Caleb带我去了我想去的地方。为了完整起见,这是解决方案。

在创建目录中,我有一个用于实际调用的js文件。表演部分在下面。

perform: (z, bundle) => {
  const promise = z.request({
    url: 'https://api.example.com/API/Example/' + bundle.inputData.elgRequestID,
    method: 'GET',
    headers: {
      'content-type': 'application/json',
    }
  });
  return promise.then(function(result) {
     var data = JSON.parse(result.content);
     for (var i=0; i<data.networkSections.length; i++) {
        for (var j=0; j<data.networkSections[i].inNetworkParameters.length; j++) {
           // DEDUCT
           if (data.networkSections[i].identifier == "Deductible" &&
                           data.networkSections[i].inNetworkParameters[j].key == "Annual")
             data["zAnnual Deductible"] = data.networkSections[i].inNetworkParameters[j].value;

        } // inner for

     } // outer for
     return data;
     });