如何在DataWeave中将Debezium/Kafka的字符串数组转为数组并过滤?
优化方案:高效解析字符串数组并筛选元素
核心优化思路
直接使用DataWeave内置的fromJson()函数解析字符串格式的数组,这是最简洁高效的方式——因为你的reasons字段本身就是标准JSON数组格式,无需手动处理括号和拆分操作。
完整代码实现
output application/json var data = payload.payload.after // 一步完成字符串转数组+筛选目标元素 var targetReasons = fromJson(data.reasons) filter ($ == 10 or $ == 11) --- { "dnsType": if (targetReasons contains 11) "clinical" else if (targetReasons contains 10) "non-clinical" else "" }
为什么比原有代码更好
- 更高效简洁:
fromJson()直接完成字符串到原生数组的转换,省去了replace+splitBy的多步操作,执行效率更高。 - 更强的健壮性:如果
reasons字符串里包含空格(比如"[7, 10, 9]"),原有代码拆分后会得到带空格的元素" 10",导致筛选逻辑失效;而fromJson()会自动忽略这类格式细节,正确解析为数值数组。 - 逻辑更准确:原有代码的筛选条件写反了(用
!=是排除目标值,而你需要的是保留10或11),且用字符串比较不如直接用数值比较严谨;优化后的代码直接基于数值判断,逻辑更清晰。 - 结果更可靠:原有代码用
dnsType[0]取第一个元素判断,但若筛选后的数组为空或元素顺序变化,会导致错误;优化后用contains检查数组中是否存在目标值,逻辑更稳妥。
内容的提问来源于stack exchange,提问作者Matt P
相关产品推荐
相关产品推荐

