You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求符合要求的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"
        }
      }
    }
  }
]

步骤说明

  1. 提取核心数据:从输入中分离出inventoryType的关键信息和日期范围,存入临时数组invTypes和dates。
  2. 转换键值结构:将数组元素转为inv_0_code、date_1_end这类带索引的键,方便后续通配符匹配。
  3. 构造笛卡尔积:通过#2匹配索引位置,将所有inventoryType和dateRange的组合映射到ratePeriods数组。
  4. 整理字段格式:用cardinality操作确保每个ratePeriod的字段都是单个值,避免数组嵌套。

内容的提问来源于stack exchange,提问作者Optimizer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 22:12:38