SnapLogic Router Snap JavaScript表达式求助:按CSV规则路由文档
解决SnapLogic Router Snap的条件路由问题
问题分析
你的需求是:输入为字典列表,检查前两个字典对象的Name字段值是否包含.csv;任意一个包含则路由到output-1,两者都不包含则路由到output-2。
你之前的表达式($.keys()[0] != 'Name') && ($.keys()[1] != 'Name')无效的原因是:输入是列表类型,$.keys()返回的是列表的索引(['0', '1']),所以你实际在判断索引字符串是否等于'Name',完全偏离了检查Name字段值的需求。
正确的表达式实现
1. 路由到output-1的表达式
该表达式检查前两个列表元素的Name字段(优先取顶层Name,不存在则取original.Name)是否包含.csv,任意一个满足则返回true:
($[0].get('Name', $[0].original.get('Name', '')).includes('.csv')) || ($[1].get('Name', $[1].original.get('Name', '')).includes('.csv'))
2. 路由到output-2的表达式
取上述表达式的反逻辑,即两个元素的Name都不包含.csv时返回true:
!($[0].get('Name', $[0].original.get('Name', '')).includes('.csv')) && !($[1].get('Name', $[1].original.get('Name', '')).includes('.csv'))
关键说明
- 使用
get(key, defaultValue)方法可以安全获取嵌套字段,避免因字段不存在导致表达式报错; includes('.csv')用于判断字符串是否包含指定后缀,精准匹配你的需求;$[0]和$[1]分别代表输入列表的第一个和第二个元素,符合你检查前两个对象的要求。
内容的提问来源于stack exchange,提问作者Sri Harsha Vunnam
相关产品推荐
相关产品推荐

