【问题标题】:How to validate multiple $ref in a JsonSchema type property如何验证 JsonSchema 类型属性中的多个 $ref
【发布时间】:2014-02-10 21:34:40
【问题描述】:

我想使用 Json Schema 来验证 restful web 服务上的一些传入 Json。但我在架构的 type 属性中使用多个 $ref 时遇到问题。

我需要能够做到这一点:

"type" : [ {"$ref" : "#myObjectRef"}, {"$ref" : "#otherRef"} ]

即该对象必须符合所引用的架构之一。

但是当我使用 JsonSchema.Parse 通过 Json.Net 运行它时,我收到以下错误: "异常 JSON 模式类型字符串令牌,得到 Array"

在通过 Json.Net 验证器尝试 this Json Schema 获取来自 TinCan Api 的语句时,我得到了完全相同的错误。但是 json 架构针对 JsonSchema Lint 进行验证。

Json.Net 如何处理模式中的多个类型选项?是否有替代 .net 库可以进行此验证?

【问题讨论】:

  • 顺便说一句,您在 Json.Net 上提出过错误吗?这显然是一个错误。
  • 另外,他们只支持v3,不支持v4吗?

标签: .net json.net jsonschema


【解决方案1】:

JSON Schema 中的 type 字段必须是字符串或唯一字符串数组。这些字符串可以是任何 JSON 原语。

  • 数组
  • 布尔值
  • 整数
  • 号码
  • 空
  • 对象
  • 字符串

您需要的是oneOf 字段。

{
    "oneOf": [{"$ref": "#myObjectRef"}, {"$ref": "#otherRef"}]
}

此架构强制对象必须符合所引用的两个架构中的一个(并且只有一个)。如果同时匹配两种模式也有效,则可以改用anyOf。

参考文献

【讨论】:

    猜你喜欢
    • 2018-09-21
    • 1970-01-01
    • 1970-01-01
    • 2018-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-14
    相关资源
    最近更新 更多