TOML Schema 校验工具
用 JSON Schema(draft-07)校验 TOML 数据:左栏粘贴 Schema,右栏粘贴 TOML,实时校验并精确定位错误路径。复用 JSON Schema 校验引擎,覆盖 type、required、properties、items、enum、数值范围、字符串约束、数组唯一性、$ref 内部引用等核心关键字。额外检测 TOML 类型陷阱(日期时间值转 JSON 时丢失原始类型与时区信息、64 位整数超过 Number.MAX_SAFE_INTEGER 时精度丢失),适用于 pyproject.toml(PEP 621)、Cargo.toml、rust-toolchain.toml、renovate.json 等场景。数据仅在浏览器本地处理,敏感配置不外传。
校验结果
常见问题
为什么用 JSON Schema 校验 TOML 数据?
JSON Schema 是描述数据结构的标准,与数据格式无关。TOML 解析后会得到与 JSON 等价的 JS 对象(对象、数组、字符串、数字、布尔),因此完全可以用 JSON Schema 校验 TOML。实际上 Cargo 与 PEP 621 都基于类似思路校验配置。本工具让你无需手动转 TOML 为 JSON 即可直接校验。
支持哪些 TOML 特性?
底层使用 smol-toml 解析,支持:表([table])、数组表([[arr]])、点号键(a.b.c = 1)、内联表({ x = 1, y = 2 })、多行字符串("""..."""、'''...''')、4 种日期时间类型(offset date-time、local date-time、local date、local time)、整数(含下划线分隔、十六进制 / 八进制 / 二进制)、浮点数(含特殊值 inf / nan)、布尔、数组。注释会被忽略。
什么是 TOML 类型陷阱?
TOML 类型系统与 JSON / JS 不完全等价,主要有两类陷阱:①日期时间值:TOML 原生支持 4 种日期时间类型,但 JS 只有 Date 对象,转 JSON 时会统一变成 ISO 8601 字符串(如 2024-01-15T10:30:00+08:00 → "2024-01-15T02:30:00.000Z"),原始类型(local date / local time / offset datetime)与时区偏移信息会丢失。②64 位整数精度:TOML 支持 64 位整数(最大 9223372036854775807),但 JS Number 只能安全表示到 2^53-1(9007199254740991),超过此值的整数转 JS Number 后会丢失精度。本工具自动扫描并提示这两类陷阱。
适用于哪些场景?
pyproject.toml(PEP 621 项目元数据)校验、Cargo.toml(Rust 包配置)校验、rust-toolchain.toml(Rust 工具链配置)校验、renovate.json(依赖更新配置)校验、AnyAPI.toml 校验、任意 TOML 配置文件结构校验。只要能写出对应的 JSON Schema,就能校验任意 TOML 数据结构。本工具示例采用 PEP 621 pyproject.toml 简化模型。
与 JSON Schema / YAML Schema 校验工具有何区别?
三者共用同一套 draft-07 校验引擎,区别在数据输入格式:JSON Schema 工具校验 JSON 数据,YAML Schema 工具校验 YAML 数据,本工具校验 TOML 数据。如果你写的是 JSON 用前者,写的是 YAML 用 YAML Schema,写的是 TOML 用本工具。TOML 版本额外提供日期时间类型与大整数精度陷阱检测,JSON 不存在此问题(JSON 类型严格且无 64 位整数)。
数据会上传到服务器吗?
不会。本工具完全在浏览器内运行,Schema 与 TOML 数据均由 JavaScript 在本地校验,不会发送到任何服务器。对于包含敏感信息的 Cargo.toml 或 pyproject.toml,本地校验更安全。
校验失败后如何定位问题?
结果区会列出每条错误:关键字徽章(按类型分类着色)+ 实例路径(JSON Pointer 风格,如 /project/requires-python)+ 中文消息。点击错误项可高亮该路径。若错误由 TOML 类型陷阱引起(如日期时间值被当作字符串校验失败),结果区同时显示类型提示,建议在 Schema 中声明 type=string + format=date-time。