当前位置: 首页 > 知识库问答 >
问题:

如何在JSON模式验证器中表示联合类型?

闻人杰
2023-03-14
type Conf = {
idle_session_timeout?: number | "none",
item: {
    kind: "attribute";
    name: string;
} | {
    kind: "relation";
    name: string;
} | {
    kind: "group";
    name: string;
    label?: string | undefined;
    entries: PresentationItem[];
}
 order_by: string | {
    attribute: string;
    direction?: "asc" | "desc" | undefined;
}
}

我从http://json-schema.org/draft-07/schema中注意到,它支持if then else语句根据值切换验证模式,但我不知道如何实现它们。

共有1个答案

巫马曜文
2023-03-14

您需要注意以下几个关键字,并可能参考以下规范:

首先,“type”允许在一个数组中指定多个值。这样,您可以指定[“string”,“number”]表示“string或number”。许多关键字仅在实例为特定JSON类型时应用。通常,您可以将一个“类型”模式和另一个不同的“类型”模式组合在一起,如果所有剩余的关键字仅适用于相应的类型。

因此,作为一个示例,您可以有两个模式,如下所示:

{
  "type": "string",
  "minLength": 1
}
{
  "type": "number",
  "minimum": 0
}
{
  "type": ["string", "number"],
  "minLength": 1
  "minimum": 0
}
{
"type": "object",
"properties": {
  "idle_session_timeout": {
    "type": ["number","string"],
    "anyOf": [ {"type":"number"}, {"const":"none"} ]
  },
  "item": {
    "type": "object",
    "required": ["kind", "name"],
    "properties": {
      "kind": { "type": "string" },
      "name": { "type": "string" },
    },
    "anyOf": [
      {
        "properties": {
          "kind": { "const": "attribute" },
        }
      },
      {
        "properties": {
          "kind": { "const": "relation" },
        }
      },
      {
        "required": ["entries"],
        "properties": {
          "kind": { "const": "group" },
          "label": { "type": "string" },
          "entries": { "type":"array", "items": {"$ref":"PresentationItem"} },
        }
      }
    ]
  },
  "order_by": {
    "type": ["string", "object"],
    "required": ["attribute"],
    "properties": {
      "attribute": { "type": "string" },
      "direction": { "enum": ["asc", "desc"] },
    }
  }
}

 类似资料:
  • 据我所知,有一些方法可以根据RDF模式验证序列化的RDF(例如RDF/XML)(如何用您的RDF模式验证RDF)。还有,从RDF/XML到JSON-LD序列化格式的各种转换器(反之亦然)。在Internet上搜索,我找不到一种直接的方法来验证JSON-LD与某种JSON模式的关系,就像RDF模式与RDF(/XML)的关系一样。当然,有各种各样的JSON-LD文档表单,所以我假设一个模式不能很容易地

  • 问题内容: 例如,文件系统的架构,目录包含文件列表。该模式由文件规范,下一个子类型“ image”和另一个“ text”组成。 在底部是主目录架构。目录具有属性内容,该属性内容是应作为文件子类型的项目的数组。 基本上,我正在寻找一种告诉验证器从正在验证的json对象中的属性中查找“ $ ref”的值的方法。 示例json: “伪”模式 说明“图像”和“文本”定义包含在同一模式中,但它们可能在其他位

  • 我有一个用例,我将把一个json-schema作为输入,验证它,然后保存在我的系统中。稍后,我将获取json数据,我需要使用上面提到的json-schema来验证这些数据。给定这个场景,我需要执行两个级别的验证: 我使用的是json-schema-validator jar,只能找到第二级验证,在文档中找不到json-schema验证。例如:假设我们有以下示例json-schema:

  • 我不知道如何正确设置超架构以使用json架构验证器。我使用的是json模式验证器的java版本,版本是2.2.5。 我的模式是: 我的 json 对象是: 现在,当我将模式加载到并打算开始验证时,我得到以下警告: 除了$Schema字段之外,还有什么要配置以使用超模式的吗?

  • 我有一个简单的表单,需要验证输入的开头和结尾是否不是空格。 在HTML5中,我将这样做: 在新的Angular 2 ngControl指令中,验证模式的正确属性是什么?官方的Beta API在这个问题上仍然缺乏留档。

  • 我试图根据Python中的JSON模式验证TSV文件的行。下面是该模式的一个示例: TSV文件如下所示: null