如何定义可同时兼容数组和单对象场景的Jolt spec转换规则
解决方案
修正后的Jolt Spec
[ { "operation": "cardinality", "spec": { "patient": "ONE", "patient.dateOfBirth": "ONE" } }, { "operation": "shift", "spec": { "patient": { "dateOfBirth": "patient.dateOfBirth", "firstName": "patient.firstName", "lastName": "patient.lastName" } } } ]
规则说明
- 第一步
cardinality操作负责标准化节点格式,兼容两种输入场景:"patient": "ONE":自动识别patient节点类型,如果是对象数组则取第0个元素转换为单个对象,如果已经是单个对象则不做修改"patient.dateOfBirth": "ONE":自动识别dateOfBirth节点类型,如果是字符串数组则取第0个元素转换为单个字符串,如果已经是单个字符串则不做修改
- 第二步
shift操作保持原有逻辑,仅映射需要的字段到目标输出结构。
原spec的问题在于将dateOfBirth的 cardinality 规则嵌套在patient节点的子层级中,当输入patient为单个对象时,嵌套的通配符规则无法正确作用到dateOfBirth字段,导致dateOfBirth仍然输出为数组。调整为平级的cardinality规则后即可覆盖两种输入场景,输出符合预期。
内容的提问来源于stack exchange,提问作者Subhadip Gupta
相关产品推荐
相关产品推荐

