兼容有无materialMovements数组的通用Jolt转换规范编写
Jolt规范兼容有无materialMovements数组两类输入的调整方案
场景说明
- 需求:编写通用Jolt转换规范,将不同结构的输入统一输出为扁平化JSON
- 两类输入差异:除输入1携带
materialMovements数组、输入2无该数组外,其余字段结构完全一致 - 现状:现有Jolt规范可正常处理带
materialMovements数组的输入1,但无法兼容无该数组的输入2,调整时需保留所有原有JSON字段定义、Jolt语法、代码结构,不得改动原有已生效的处理逻辑。
调整方法
核心原因是现有规范默认强制匹配materialMovements路径,当输入不存在该节点时会触发路径匹配失败,仅需做极小改动即可兼容,完全不影响原有输入1的转换结果:
- 在原有Jolt规范的最开头新增一个default操作,为不存在的
materialMovements节点设置空数组兜底:
{ "operation": "default", "spec": { "materialMovements": [] } }
default操作的生效逻辑是仅当输入中不存在对应节点时才会写入默认值,不会覆盖输入1中原本携带的
materialMovements数组内容,原有转换逻辑对输入1的处理结果和调整前完全一致。
- 如果原有规范中存在针对
materialMovements的cardinality、modify类操作,给对应匹配键前增加?存在性判定标识即可,例如原规则"materialMovements": "ONE"修改为"?materialMovements": "ONE",规则会在节点存在时正常执行,节点不存在时直接跳过,不会抛出匹配异常。
调整完成后,将原有已经写好的可正常处理输入1的Jolt规范原封不动接在新增的default操作后面,组成完整的Jolt spec数组即可同时适配两类输入。
内容的提问来源于stack exchange,提问作者Thiyagaraj Narayanan
相关产品推荐
相关产品推荐

