问题描述
我正在构建一个自定义 Zapier 应用,需要通过 Xero API 获取特定的嵌套值。
我的 API 端点设置如下:
const options = {
url: `https://api.xero.com/api.xro/2.0/Contacts/${bundle.inputData.ContactID}`,method: 'GET',headers: {
'Content-Type': 'application/json','Accept': 'application/json','Authorization': `Bearer ${bundle.authData.access_token}`,'xero-tenant-id': process.env.TENANT_ID
},}
return z.request(options)
.then((response) => {
response.throwForStatus();
const results = response.json;
return results;
});
这又回来了:
"Id": "8092d924-6ce1-415e-9a45-f61294c17bc7","Status": "OK","ProviderName": "Commission statements","DateTimeUTC": "/Date(1620408485950)/","Contacts": [
{
"ContactID": "fd9c3e88-4128-4d68-94f6-d40eef08d3b2","AccountNumber": "1846","ContactStatus": "ACTIVE","Name": "xxx","FirstName": "","LastName": "","EmailAddress": "xxx@test.com","BankAccountDetails": "","Addresses": [
{
"Addresstype": "STREET","City": "","Region": "","PostalCode": "","Country": "","AttentionTo": ""
},{
"Addresstype": "POBox","AttentionTo": ""
}
],"Phones": [
{
"PhoneType": "DDI","PhoneNumber": "","PhoneAreaCode": "","PhoneCountryCode": ""
},{
"PhoneType": "DEFAULT",{
"PhoneType": "FAX","PhoneNumber": "0014I000023R123",{
"PhoneType": "MOBILE","PhoneCountryCode": ""
}
],"UpdatedDateUTC": "/Date(1618586879300+0000)/","ContactGroups": [],"Issupplier": false,"IsCustomer": true,"ContactPersons": [],"HasAttachments": false,"Attachments": [],"HasValidationErrors": false
}
]
}
仅当 PhoneType 为 FAX 时,我才需要在 Phones 中返回“PhoneNumber”的值。所以在这种情况下,我需要返回 0014I000023R123。我真的在为如何实现这一点的语法而苦苦挣扎(我首先是营销人员,最重要的是不是开发人员!)。非常感谢这里的任何帮助,谢谢。
解决方法
我不太擅长 Javascript,但以下应该可行:
var phoneList = results.Contacts[0].Phones;
将从第一个(也是唯一的,假设只有一个)联系人中获取电话列表。
var fax = phoneList.filter(function (phone) {
return phone.PhoneType == "FAX";
})[0].PhoneNumber;
将过滤电话列表并返回第一个带有 PhoneType == FAX 的电话,然后获取该电话的电话号码。
因此,在这种情况下,传真将等于 0014I000023R123,您可以将其返回。
希望这个答案有帮助,可能有更漂亮的方法来做到这一点,但我已经对其进行了测试并且可以正常工作。