【问题标题】:Zapier - add data to JSON response (App development)Zapier - 将数据添加到 JSON 响应(应用程序开发)
【发布时间】:2019-06-25 08:46:46
【问题描述】:

我们正在创建一个 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”等组成的数组

【问题讨论】:

    标签: zapier zapier-cli


    【解决方案1】:

    很好的问题。在这种情况下,发生了很多事情,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;
    

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

    希望对大家有所帮助!

    【讨论】:

    • 感谢 Caleb,但不能保证 JSON 顺序对吗?有没有做 if/then/else 的例子?我什至不确定你的应用代码是什么语言。TYVM
    • 我使用的是 JavaScript。 :) JSON 中的对象没有保证的顺序,但数组应该保持它们的顺序(参见json.org/'s 两种结构的定义)。
    【解决方案2】:

    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;
         });
    

    【讨论】:

      猜你喜欢
      • 2016-07-30
      • 1970-01-01
      • 1970-01-01
      • 2015-06-10
      • 2016-08-11
      • 1970-01-01
      • 1970-01-01
      • 2012-12-20
      • 1970-01-01
      相关资源
      最近更新 更多