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

React应用如何编程获取JSON Schema内置format可用值列表

编程获取JSON Schema标准内置format取值列表实现方案

你的场景里已经指定了"$schema": "http://json-schema.org/schema"(对应最新稳定版JSON Schema规范),不需要硬编码格式列表,以下两种方案都可以直接在React项目里用,拿到的取值100%和规范对齐:

  • 方案1:从官方元Schema提取(零额外冗余依赖,最稳定)
    JSON Schema官方的元Schema文件本身就明确定义了format字段的所有合法枚举值,你只需要引入对应版本的元Schema,构建/运行时直接提取枚举即可,完全不需要爬文档或者手动维护列表。
    示例代码:
// utils/jsonSchemaFormats.js
// 引入和你项目$schema版本完全对应的官方元Schema
import metaSchema from 'json-schema/meta/schema.json';

export const getBuiltinFormats = () => {
  // 元Schema中format属性的oneOf约束就是所有标准内置值
  return metaSchema.properties.format.oneOf.map(item => item.const);
};

这个方案的优势是完全和规范绑定,后续如果要切换JSON Schema版本,只需要切换引入的元Schema文件即可,自动适配版本间的format差异,不会出现漏值、多值的问题。拿到的列表默认覆盖日期时间、邮箱、主机名、IP地址、资源标识符等所有官方定义的分类。

  • 方案2:从现有JSON Schema校验库读取(适合已集成校验能力的项目)
    如果你的React项目已经在使用Ajv这类常用的JSON Schema校验库,这类库本身就内置了全量标准format定义,可以直接从库实例读取列表,不需要额外引入元Schema依赖。
    以最常用的Ajv为例:
// utils/jsonSchemaFormats.js
import Ajv from 'ajv';
import addFormats from 'ajv-formats';

const ajv = new Ajv();
addFormats(ajv);

export const getBuiltinFormats = () => {
  // 实例上挂载的formats属性包含所有已注册的标准格式
  return Object.keys(ajv.formats);
};

注意用这个方法的时候,不要在注册自定义format时和标准format重名,否则提取的列表会混入自定义值,保持默认配置拿到的就是完整标准列表。

注意:不要手动硬编码format列表,JSON Schema不同Draft版本的内置format存在差异,比如Draft 7版本没有duration、idn-email这类2020-12版本新增的格式,以上两种提取方式会自动匹配你使用的规范版本,不会出现版本不兼容的问题。

在前端UI里渲染选项时直接调用方法取值即可,示例:

import { getBuiltinFormats } from '../utils/jsonSchemaFormats';

export default function FormatSelector() {
  const formatList = getBuiltinFormats();
  return (
    <label>
      选择format类型:
      <select>
        {formatList.map(fmt => (
          <option key={fmt} value={fmt}>{fmt}</option>
        ))}
      </select>
    </label>
  );
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 20:33:39