Jolt:ItemDetails为数组时无法设置缺失字段默认值的问题
Jolt规则修正:为数组/对象类型的ItemDetails统一设置缺失字段默认值
输入JSON
{ "MainObj": { "SubObj": { "Name": "John", "Surname": "Smith", "Items": [ { "ItemDetails": { "MissingKey1": "MissingValue1" // 原规则中此字段的默认值生效 } }, { "ItemDetails": [ { "MissingKey1": "MissingValue2" // 原规则中此字段的默认值不生效 }, { "MissingKey2": "Not available" // 原规则中此字段的默认值不生效 } ] } ] } } }
问题说明
需求为ItemDetails内的缺失字段MissingKey2设置默认值,但ItemDetails既可能是单个对象,也可能是对象数组。现有Jolt规则仅能处理ItemDetails为对象的场景,无法对数组内的元素生效。
修正后的Jolt规则
[ { "operation": "modify-overwrite-beta", "spec": { "MainObj": { "SubObj": { "Items": { "*": { // 处理ItemDetails为单个对象的情况 "ItemDetails": { "~MissingKey1": "Not available", "~MissingKey2": "Not available" }, // 处理ItemDetails为数组的情况,遍历数组内每个元素 "ItemDetails[]": { "*": { "~MissingKey1": "Not available", "~MissingKey2": "Not available" } } } } } } } } ]
规则说明
- 对象场景处理:直接针对
ItemDetails对象,用~字段名语法给缺失字段设置默认值,同时覆盖原规则中仅处理MissingKey1的逻辑,新增MissingKey2的默认值配置。 - 数组场景处理:通过
ItemDetails[]语法明确匹配数组类型的ItemDetails,再用*遍历数组内的每个元素,给每个元素的缺失字段设置默认值。 - 两种场景的配置合并在同一个
modify-overwrite-beta操作中,无需拆分多个步骤。
输出结果
{ "MainObj": { "SubObj": { "Name": "John", "Surname": "Smith", "Items": [ { "ItemDetails": { "MissingKey1": "MissingValue1", "MissingKey2": "Not available" } }, { "ItemDetails": [ { "MissingKey1": "MissingValue2", "MissingKey2": "Not available" }, { "MissingKey2": "Not available", "MissingKey1": "Not available" } ] } ] } } }
内容的提问来源于stack exchange,提问作者user3691240
相关产品推荐
相关产品推荐

