求符合要求的JOLT转换规则:按inventoryTypeCode和日期范围生成ratePeriods
JOLT转换修正:生成inventoryType与日期范围的全组合ratePeriods
输入示例
{ "inventoryTypes": [ { "inventoryTypeCode": "ROOM", "values": [ { "value": 100 }, { "value": 120 } ] }, { "inventoryTypeCode": "SUITE", "values": [ { "value": 200 }, { "value": 250 } ] } ], "dateRanges": [ { "start": "2024-01-01", "end": "2024-01-15" }, { "start": "2024-01-16", "end": "2024-01-31" } ] }
期望输出
{ "ratePeriods": [ { "inventoryTypeCode": "ROOM", "inventoryTypeRate": 100, "start": "2024-01-01", "end": "2024-01-15" }, { "inventoryTypeCode": "ROOM", "inventoryTypeRate": 100, "start": "2024-01-16", "end": "2024-01-31" }, { "inventoryTypeCode": "SUITE", "inventoryTypeRate": 200, "start": "2024-01-01", "end": "2024-01-15" }, { "inventoryTypeCode": "SUITE", "inventoryTypeRate": 200, "start": "2024-01-16", "end": "2024-01-31" } ] }
问题分析
原JOLT spec仅实现了同索引位置的inventoryType与dateRange匹配,因此只生成2个ratePeriods。要实现全组合,需要构造inventoryType和dateRange的笛卡尔积。
修正后的JOLT Spec
[ // 提取核心数据:inventoryType的code/首个value、dateRange的起止日期 { "operation": "shift", "spec": { "inventoryTypes": { "*": { "inventoryTypeCode": "invTypes[&1].code", "values": { "0": { "value": "invTypes[&3].rate" } } } }, "dateRanges": { "*": { "start": "dates[&1].start", "end": "dates[&1].end" } } } }, // 将数组元素转换为独立键值对,为笛卡尔积做准备 { "operation": "shift", "spec": { "invTypes": { "*": { "*": "inv_&1_&" } }, "dates": { "*": { "*": "date_&1_&" } } } }, // 生成所有inventoryType与dateRange的组合 { "operation": "shift", "spec": { "inv_*_code": { "$": "ratePeriods[#2].inventoryTypeCode" }, "inv_*_rate": { "$": "ratePeriods[#2].inventoryTypeRate" }, "date_*_start": { "$": "ratePeriods[#2].start" }, "date_*_end": { "$": "ratePeriods[#2].end" } } }, // 确保每个ratePeriod的字段为单个值,消除数组形式 { "operation": "cardinality", "spec": { "ratePeriods": { "*": { "inventoryTypeCode": "ONE", "inventoryTypeRate": "ONE", "start": "ONE", "end": "ONE" } } } } ]
步骤说明
- 提取核心数据:从输入中分离出inventoryType的关键信息和日期范围,存入临时数组
invTypes和dates。 - 转换键值结构:将数组元素转为
inv_0_code、date_1_end这类带索引的键,方便后续通配符匹配。 - 构造笛卡尔积:通过
#2匹配索引位置,将所有inventoryType和dateRange的组合映射到ratePeriods数组。 - 整理字段格式:用
cardinality操作确保每个ratePeriod的字段都是单个值,避免数组嵌套。
内容的提问来源于stack exchange,提问作者Optimizer
相关产品推荐
相关产品推荐

