首页 > 解决方案 > Zapier - 将数据添加到 JSON 响应(应用程序开发)

问题描述

我们正在创建一个 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'},

即这将返回一个“Annual”、“Remaining”等数组

标签: zapierzapier-cli

解决方案


好问题。在这种情况下,发生了很多事情,并且outputFields无法完全处理所有事情。:(

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

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

下一步需要发送

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

用户可以通过映射some_array.some_keydata.some_other_key.

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

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

如果顺序不同,您将不得不执行某种搜索来找到您想要返回的对象。

希望对大家有帮助!


推荐阅读