【问题标题】:Dataweave check if a value is contained within a YAML listDataweave 检查值是否包含在 YAML 列表中
【发布时间】:2020-02-02 23:44:11
【问题描述】:

我想检查 YAML 列表中是否存在该值。

我有 product.yaml

intGrp:
  - "A"
  - "CD"
  - "EF"
  - "ABC"
  - "CDEF"

来自我要检查的转换消息

If (intGrp contains payload.myvalue) this else that

试过了

%dw 2.0
var prop = Mule::p('intGrp')
output application/json
---
{
    a: prop contains ("A")
}

但这并不能解决我的问题。因为我想做一个精确的字符串匹配。即如果我给 a: prop contains ("AB") 我应该得到一个错误,因为没有“AB”产品。

任何帮助将不胜感激。 谢谢

【问题讨论】:

    标签: mule dataweave mule4


    【解决方案1】:

    问题是 YAML 数组在属性中被解释为逗号分隔的字符串。 contains() 函数在字符串中的工作方式与在数组中的工作方式不同。它在字符串中搜索匹配的子字符串,因此“AB”返回真。您可以使用 splitBy() DataWeave 函数将字符串转换回数组。我将两者并排显示以突出​​差异:

    %dw 2.0
    var prop = Mule::p('intGrp') 
    var propArray = Mule::p('intGrp') splitBy ',' 
    output application/json
    ---
    {
        raw: prop,
        array: propArray,
        a: propArray contains ("A"),
        ab: propArray contains ("AB")
    }
    

    输出是:

    {
      "raw": "A,CD,EF,ABC,CDEF",
      "array": [
        "A",
        "CD",
        "EF",
        "ABC",
        "CDEF"
      ],
      "a": true,
      "ab": false
    }
    

    请注意,如果任何条目包含逗号,它也会被拆分。

    【讨论】:

      猜你喜欢
      • 2013-02-08
      • 2020-05-09
      • 1970-01-01
      • 1970-01-01
      • 2020-10-08
      • 2019-04-04
      • 2014-07-31
      • 2013-05-28
      • 1970-01-01
      相关资源
      最近更新 更多