Camunda 如何正确实现JSON数组是否包含指定元素的条件判断
可行实现方案
方案1:使用Camunda SPIN JSON处理组件(推荐)
该方案适配Camunda原生生态,不会出现元素不存在时的异常报错问题,首先确保项目已引入Camunda SPIN相关依赖,条件表达式写法如下:
<bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">${ S(json_array).elements().contains("foo") }</bpmn:conditionExpression>
- 逻辑说明:
S()是SPIN提供的JSON解析入口,elements()方法会将JSON数组转换为Java List对象,contains()方法判断元素是否存在,不存在时直接返回false,完全匹配需求。
方案2:提前转换为Java List类型流程变量
无需引入额外组件的轻量化方案,在流程变量赋值阶段,直接将JSON字符串数组提前反序列化为java.util.List类型的流程变量,假设命名为jsonArrayList,后续条件表达式直接调用List原生方法:
<bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">${ jsonArrayList.contains("foo") }</bpmn:conditionExpression>
该写法依赖Java List原生实现,稳定性最高。
方案3:临时兼容写法
如果暂时无法调整流程变量和依赖,可以采用JSON字符串直接匹配实现判断,仅适用于元素值不含引号等特殊字符的场景:
<bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">${ json_array != null and json_array.toString().contains('"foo"') }</bpmn:conditionExpression>
内容的提问来源于stack exchange,提问作者Rasmus Faber
相关产品推荐
相关产品推荐

