Zapier - 将数据添加到 JSON 响应(应用程序开发)
Zapier - add data to JSON response (App development)
我们正在创建一个 Zapier 应用程序以向 public 公开我们的 API,以便任何人都可以使用它。人们使用的主要端点 return 是一个非常大且复杂的 JSON 对象。看起来 Zapier 很难解析嵌套的复杂 JSON。但是它对于一个非常简单的响应对象(例如
)来说确实很棒
{ "field": "value" }
我们正在 returned 的数据具有这种结构,我们希望将一些字段移动到响应的根目录,以便 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
},
那么,我们能否对 return 做些什么,例如剩余的免赔额?
我已经走到这一步了(添加 outputFields),但这 return 是一个值数组。我不确定如何在 Zap 或应用程序中解析此数组。
{key: 'networkSections[]inNetworkParameters[]key', label: 'xNetworkSectionsKey',type: 'string'},
即这个 return 是 "Annual"、"Remaining" 等的数组
好问题。在这种情况下,发生了很多事情,outputFields
无法处理所有事情。 :(
在您的示例中,inNetworkParameters
包含一个对象数组。在我们的整个文档中,我们将它们称为 line items。这些订单项可以传递给其他操作,但不同的预期结构会带来一些问题。我们处理这个问题的方法是让用户将行项目从一个步骤的输出映射到另一个步骤的每个字段的输入。所以如果第 1 步 returns
{
"some_array": [
{
"some_key": "some_value"
}
]
}
下一步需要发送
{
"data": [
{
"some_other_key": "some_value"
}
]
}
用户可以通过将 some_array.some_key
映射到 data.some_other_key
来实现这一点。
综上所述,如果您想始终 return 一个 Remaining Deductible
对象,则必须通过修改结果对象本身来实现。只要这些数据始终以相同的顺序排列,您就可以执行类似于
的操作
var data = z.JSON.parse(bundle.response.content);
data["Remaining Deductible"] = data.networkSections[0].inNetworkParameters[1].value;
return data;
如果顺序不同,您必须执行某种搜索以找到您想要的对象 return。
希望对大家有所帮助!
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;
});
我们正在创建一个 Zapier 应用程序以向 public 公开我们的 API,以便任何人都可以使用它。人们使用的主要端点 return 是一个非常大且复杂的 JSON 对象。看起来 Zapier 很难解析嵌套的复杂 JSON。但是它对于一个非常简单的响应对象(例如
)来说确实很棒{ "field": "value" }
我们正在 returned 的数据具有这种结构,我们希望将一些字段移动到响应的根目录,以便 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
},
那么,我们能否对 return 做些什么,例如剩余的免赔额?
我已经走到这一步了(添加 outputFields),但这 return 是一个值数组。我不确定如何在 Zap 或应用程序中解析此数组。
{key: 'networkSections[]inNetworkParameters[]key', label: 'xNetworkSectionsKey',type: 'string'},
即这个 return 是 "Annual"、"Remaining" 等的数组
好问题。在这种情况下,发生了很多事情,outputFields
无法处理所有事情。 :(
在您的示例中,inNetworkParameters
包含一个对象数组。在我们的整个文档中,我们将它们称为 line items。这些订单项可以传递给其他操作,但不同的预期结构会带来一些问题。我们处理这个问题的方法是让用户将行项目从一个步骤的输出映射到另一个步骤的每个字段的输入。所以如果第 1 步 returns
{
"some_array": [
{
"some_key": "some_value"
}
]
}
下一步需要发送
{
"data": [
{
"some_other_key": "some_value"
}
]
}
用户可以通过将 some_array.some_key
映射到 data.some_other_key
来实现这一点。
综上所述,如果您想始终 return 一个 Remaining Deductible
对象,则必须通过修改结果对象本身来实现。只要这些数据始终以相同的顺序排列,您就可以执行类似于
var data = z.JSON.parse(bundle.response.content);
data["Remaining Deductible"] = data.networkSections[0].inNetworkParameters[1].value;
return data;
如果顺序不同,您必须执行某种搜索以找到您想要的对象 return。
希望对大家有所帮助!
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;
});