没有“属性”关键字的 JSON 模式

kir*_*gin 0 json jsonschema

供应商向我发送一个 json 模式。请看这个:

{
  "$schema" : "http://json-schema.org/draft-04/schema#",
  "type" : "object",
  "definitions" : {
    ...
  },
  "oneOf" : [{
      "$ref" : "#/definitions/commons/strings/text"
    }, {
      "$ref" : "#/definitions/dto/scriptStep"
    }, {
      "$ref" : "#/definitions/dto/callResult"
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

没有“属性”关键字(但顺便说一下,有非常大的“定义”部分)。这是否意味着架构实际上描述了空的 json 对象 {}?或者这是否意味着 json 可以包含“oneOf”数组中的元素之一?

Jas*_*ers 6

所有 JSON Schema 关键字都是约束。例如,空架构{}意味着任何 JSON 都是有效的。只有 `{ "type": "object" } 的模式意味着任何 JSON 对象都是有效的。对象具有的属性没有限制。

但是,这不是您的供应商在此架构中表达的内容。JSON 不仅必须对 有效"type": "object",而且必须对 中引用的三个模式之一有效oneOf。据推测,这些模式包括一个properties关键字。

这可能不是最好的设计模式,但它是有效的。