尝试找出一些Javascript从Zapier中对原始webhook触发器的JSON响应中提取字段

时间:2019-01-15 23:33:31

标签: json field zapier

我从Zapier Webhook触发器收到原始JSON响应。我正在寻找一种方法,可以轻松地访问CUSTOMFIELDS AND LINKS中的每个嵌套字段,以进行连续的Zap步骤。 JSON主体如下所示:

{"entity":{
  "OPPORTUNITY_ID":22992638,
  "OPPORTUNITY_NAME":"Test 5",
  "PROBABILITY":10,
  "BID_CURRENCY":"USD",
  "BID_TYPE":"Fixed Bid",
  "CATEGORY_ID":6132227,
  "PIPELINE_ID":575195,
  "STAGE_ID":2172640,
  "OPPORTUNITY_STATE":"OPEN",
  "RESPONSIBLE_USER_ID":1689885,
  "OWNER_USER_ID":1689885,
  "DATE_CREATED_UTC":"2019-01-15T21:11:50.28",
  "DATE_UPDATED_UTC":"2019-01-15T21:12:10.92",
  "VISIBLE_TO":"EVERYONE",
  "CUSTOMFIELDS":[{
    "CUSTOM_FIELD_ID":"Tax_Matters_Contact__c",
    "FIELD_VALUE":275224094
  }],
  "TAGS":[],
  "LINKS":[{
    "LINK_ID":199045197,
    "CONTACT_ID":275224094,
    "OPPORTUNITY_ID":22992638
  },
  {
    "LINK_ID":199045198,
    "OPPORTUNITY_ID":22992638,
    "ORGANISATION_ID":130032601
  }
  ]
}}

感谢Zapier的David,我在代码步骤中运行了此Javascript,它非常适合CONTACT_ID,因为它通常位于数组的第一位,但是如果没有CONTACT_ID,它只会找到ORGANIZATION_ID,因此它会跳过第一条记录,找到第二条。我猜它在数组中第一个列出,然后不再继续,但是我不知道为什么它不会迭代到下一个,因为它仅仅是一个原始的网络挂钩。知道如何使它起作用吗?

该数组首先提供CONTACT_ID的记录,然后提供ORGANISATION_ID的记录(如果存在),但是此顺序可以更改/反向或也可以出现另一个记录,例如PROJECT_ID。我想用一个代码步找到它们的全部或全部,以便输出提供Zap的连续阶段。

const j = JSON.parse(inputData.body)
return j.entity.LINKS.find(l => l.CONTACT_ID || l.ORGANISATION_ID) || {}

这是我的Zap:

Here's my code step

Here's the results when CONTACT_ID is found in my code

1 个答案:

答案 0 :(得分:0)

Zapier Platform团队的David在这里。

您在评论中提到,您想在LINKS中找到具有contact_idorganisation_id的第一项。这将解析json并返回与之匹配的对象(如果有)

const j = JSON.parse(inputData.entity)
return j.entity.LINKS.find(l => l.CONTACT_ID || l.ORGANISATION_ID) || {}

对于上面的对象,这将返回{"LINK_ID":199045197, "CONTACT_ID":275224094, "OPPORTUNITY_ID":22992638};如果链接中的任何项都不具有这些键之一,则返回空白。

您会注意到,我的结构与您原始问题中的代码匹配。仔细观察后,我意识到它应该首先起作用。因此,有可能由于您的设置中的某些原因而无法使用。我会用设置屏幕的屏幕截图更新您的问题,以便我们更密切地说明为什么您的代码最初不起作用。