Dataweave检查YAML列表中是否包含值

时间:2019-10-04 15:54:55

标签: mule dataweave mule4

我要检查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”。

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

1 个答案:

答案 0 :(得分:0)

问题在于YAML数组在属性中被解释为逗号分隔的字符串。 contains()函数在字符串中的作用与在数组中的作用不同。在字符串中,它搜索匹配的子字符串,因此“ AB”返回true。您可以使用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
}

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