JSON 架构 — 针对多个可为空的架构进行验证?

JSON Schema — Validate against multiple nullable schemas?

我正在尝试根据以下架构验证 null

{
  oneOf: [
    { type: "string", nullable: true },
    { type: "number", nullable: true },
  ]
}

我原以为验证会成功,但事实并非如此。没有 oneOf(所以只有一个模式,但仍然有 nullable: true)验证通过。

这是我的示例代码:

import Ajv from "ajv";
const ajv = new Ajv();
const schema = {
  oneOf: [
    { type: "string", nullable: true },
    { type: "number", nullable: true },
  ],
};

const data = null;
const validate = ajv.compile(schema);
const valid = validate(data);
if (!valid) {
  console.log(validate.errors);
} else {
  console.log("Validation Success");
}

我正在使用 Ajv@8.11.0open api specification 3.0

我认为您可以在 JSON 架构中添加 {type: "null"} 作为选项之一。有关详细信息,请参阅:https://json-schema.org/understanding-json-schema/reference/null.html

oneOf 更改为 anyOf。它失败的原因是因为 oneOf 要求数据匹配 恰好一个 模式,但是 null 将匹配两者。