mule - Dataweave 检查值是否包含在 YAML 列表中
问题描述
我想检查 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”返回真。您可以使用 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
}
请注意,如果任何条目包含逗号,它也会被拆分。
推荐阅读
- swift - SpriteView 正在返回错误的帧信息
- xml - 使用属性解组 xml 标记
- amazon-web-services - how to send AWS sns notification to specific user?
- java - Java执行一个线程并使其他线程处于等待模式
- botframework - 将 Bot Framework Composer 技能导入 PVA:发布到 PVA 还是发布到 Azure 并导入技能?
- r - 如何链接 proj 以在 CentOS 6 上成功安装 sf 包?
- c# - 当我在 mvc 中移动到下一页时,排序丢失
- javascript - 如何使用 Highcharts 库实现类似的折线图?
- python - 大熊猫中的前向填充日期失败 - Python 3.6
- google-apps-script - Google表格:基于单独表格的源列的数组中的条件格式