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

如何在JOLT中不使用乘法(*)操作实现乘法(*)运算

在JOLT中不借助乘法操作实现乘法的方法

由于JOLT原生没有直接的乘法运算符,但可以通过累加、数组展开等间接方式模拟乘法,以下是几种可行方案:

方案1:固定次数累加(适用于已知乘数的场景)

如果提前知道乘数的大小,直接通过多次modify-overwrite-beta的sum操作累加被乘数即可。

示例输入:

{
  "num1": 3,
  "num2": 4
}

对应的JOLT spec:

[
  {
    "operation": "modify-overwrite-beta",
    "spec": {
      "result": 0,
      "temp": "@(1,num1)"
    }
  },
  // 累加4次,对应num2=4
  {
    "operation": "modify-overwrite-beta",
    "spec": {
      "result": "=sum(@(1,result), @(1,temp))",
      "num2": "=sum(@(1,num2), -1)"
    }
  },
  {
    "operation": "modify-overwrite-beta",
    "spec": {
      "result": "=sum(@(1,result), @(1,temp))",
      "num2": "=sum(@(1,num2), -1)"
    }
  },
  {
    "operation": "modify-overwrite-beta",
    "spec": {
      "result": "=sum(@(1,result), @(1,temp))",
      "num2": "=sum(@(1,num2), -1)"
    }
  },
  {
    "operation": "modify-overwrite-beta",
    "spec": {
      "result": "=sum(@(1,result), @(1,temp))",
      "num2": "=sum(@(1,num2), -1)"
    }
  },
  {
    "operation": "remove",
    "spec": {
      "temp": "",
      "num2": ""
    }
  }
]

执行后输出{"num1":3,"result":12},完成3*4的计算。缺点是无法动态适配任意乘数,必须手动匹配累加次数。

方案2:递归累加(适配动态乘数)

如果需要处理未知大小的正整数乘数,可以结合递归逻辑(需JOLT环境支持递归调用),每次将乘数减1并累加被乘数,直到乘数为0。

核心JOLT spec片段:

[
  {
    "operation": "modify-overwrite-beta",
    "spec": {
      "result": "=sum(@(1,result), @(1,num1))",
      "num2": "=sum(@(1,num2), -1)"
    }
  },
  {
    "operation": "shift",
    "spec": {
      "num1": "num1",
      "num2": {
        "0": {
          "#stop": "status"
        },
        "*": {
          "@2,num1": "num1",
          "@": "num2",
          "@2,result": "result"
        }
      },
      "result": "result"
    }
  }
]

当num2递减到0时,触发停止标识,此时result即为乘积。注意:部分JOLT运行环境可能不支持递归,需提前验证。

方案3:数组展开求和

把被乘数转换成包含num2个元素的数组,再对数组求和,本质也是累加的一种变形。

示例输入:

{
  "num1": 5,
  "num2": 3
}

对应的JOLT spec:

[
  {
    "operation": "shift",
    "spec": {
      "num2": {
        "*": {
          "@2,num1": "temp[]"
        }
      },
      "num1": "num1"
    }
  },
  {
    "operation": "modify-overwrite-beta",
    "spec": {
      "result": "=sum(@(1,temp))"
    }
  },
  {
    "operation": "remove",
    "spec": {
      "temp": ""
    }
  }
]

执行后生成包含3个5的数组,求和得到15,完成5*3的计算。这种方法同样要求num2为正整数,且数值不宜过大(避免数组元素过多导致性能问题)。

关键注意点

  • 所有方案仅支持正整数乘法,若需处理负数、小数,需额外添加符号判断、小数转换的逻辑。
  • JOLT的核心用途是JSON结构转换,复杂计算场景建议在JOLT处理前后用业务代码补充计算逻辑,不要过度依赖JOLT做运算。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 04:53:08