如何使用正则表达式更新有效负载字段

How do I update a payload field using a regular expression

我需要从 phone 数字字段中删除所有非数字。由于传入数据可以采用任何模式,因此我使用正则表达式:/\D/。由于我使用的是 4.2.2 版并且更新操作符不可用,所以我使用更新语句。传入的有效载荷是

{
  "Recipient": {
    "Name": "Bob Newhart",
    "MailingAddress": {
      "Line1": "123 Main Street",
      "Line2": "Apt 5",
      "City": "Cumming",
      "State": "GA",
      "ZipCode": "30009",
      "ZipCodePlus4": "3382"
    },
    "PhoneNumber": "(999) 555-1234",
    "Company": "Disney"
  }
}

我的第一次尝试是

%dw 2.0
output application/json
---
(payload.Recipient.PhoneNumber replace /\D/ with(""))

但这并不是 return 整个有效载荷。

正在使用更新:

%dw 2.0
import * from dw::util::Values
output application/json
---
payload update ["Recipient", "PhoneNumber"] with (payload.Recipient.PhoneNumber replace /[^\d]/ with "")

所以您已经有了生成所需值所需的代码,现在您只需要使用更新函数 (https://docs.mulesoft.com/mule-runtime/4.3/dw-values-functions-update) 来替换该字段,这样您就可以获得整个负载,并更新了值。

或者,如果您在没有更新的情况下执行此操作,您可以像他这样重建对象:

%dw 2.0
output application/json
---
{
    "Recipient": {
        (payload.Recipient - "PhoneNumber"),
        "PhoneNumber": payload.Recipient.PhoneNumber replace /[^\d]/ with ""
    }
}

我们从收件人对象中删除电话号码键,同时将该对象扩展到我们新的收件人对象中,从而允许我们创建一个新的电话号码键。