Dataweave 检查一个值是否包含在 YAML 列表中
Dataweave check if a value is contained within a YAML list
我想检查 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"。
如有任何帮助,我们将不胜感激。
谢谢
问题是 YAML 数组在 属性 中被解释为逗号分隔的字符串。 contains() 函数在字符串中的工作方式与在数组中的不同。它在字符串中搜索匹配的子字符串,因此 'AB' returns 为真。您可以使用 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
}
请注意,如果任何条目包含逗号,它也会被拆分。
我想检查 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"。
如有任何帮助,我们将不胜感激。 谢谢
问题是 YAML 数组在 属性 中被解释为逗号分隔的字符串。 contains() 函数在字符串中的工作方式与在数组中的不同。它在字符串中搜索匹配的子字符串,因此 'AB' returns 为真。您可以使用 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
}
请注意,如果任何条目包含逗号,它也会被拆分。