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

如何定义JSON Schema限制数值必须为10的幂?

实现JSON Schema验证10的幂数值

你之前用multipleOf: 10的写法只对大于等于10的10次幂有效,比如10、100这类,因为multipleOf的逻辑是「数值必须是指定值的整数倍」,像1是10的0.1倍,0.1是10的0.01倍,都不是整数倍,自然通不过验证。

想要准确验证所有10的幂(包括1、0.1、1e-5这类),有两种可行方案:

方案一:利用自定义验证关键字(推荐,需验证器支持)

标准JSON Schema没有内置判断10的幂的关键字,但大多数主流验证器(比如AJV)支持自定义关键字。你可以添加一个自定义规则,通过数学计算判断数值是否为10的幂:

自定义关键字示例(以AJV为例)

首先定义验证函数:

const ajv = new Ajv();
ajv.addKeyword({
  keyword: 'powerOfTen',
  type: 'number',
  validate: (schema, data) => {
    if (data <= 0) return false; // 10的幂都是正数
    const logValue = Math.log10(data);
    return Number.isInteger(logValue); // 以10为底的对数是整数,说明是10的幂
  },
  errors: false
});

然后在JSON Schema中使用这个关键字:

"scaleFactor": {
  "type": "number",
  "powerOfTen": true
}

这个方法能准确覆盖所有10的幂,包括极大或极小的数值(比如1e100、1e-100)。

方案二:标准JSON Schema近似实现(无自定义依赖)

如果必须用纯标准JSON Schema,只能通过枚举常见的10的幂,结合anyOf来覆盖场景。虽然没法穷尽所有可能,但能满足大多数业务需求:

"scaleFactor": {
  "type": "number",
  "anyOf": [
    { "const": 1e5 },
    { "const": 1e4 },
    { "const": 1e3 },
    { "const": 100 },
    { "const": 10 },
    { "const": 1 },
    { "const": 0.1 },
    { "const": 0.01 },
    { "const": 1e-3 },
    { "const": 1e-4 },
    { "const": 1e-5 }
    // 可根据业务需求继续添加更多10的幂
  ]
}

这种方法的缺点是无法覆盖所有可能的10的幂,只能预先定义需要用到的数值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 19:02:11