【问题标题】:How do I update a payload field using a regular expression如何使用正则表达式更新有效负载字段
【发布时间】:2021-04-05 21:52:39
【问题描述】:

我需要从电话号码字段中删除所有非数字。由于传入的数据可以是任何模式,我使用正则表达式:/\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(""))

但这不会返回整个有效负载。

【问题讨论】:

标签: dataweave mule4


【解决方案1】:

使用更新:

%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 ""
    }
}

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

【讨论】:

  • 这在我的本地系统上运行良好,非常感谢!有趣的是,它会在沙箱中引发错误 (dwlang.fun)。它返回:You called the function 'Value Selector' with these arguments: 1: String ("PhoneNumber") 2: Name ("selector")
  • 记住 dwlang.fun 有很多限制来防止人们破坏共享资源。我建议在 Studio 中进行测试。 @CountBoxer
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-09
相关资源
最近更新 更多