仅允许JSON数组中的$ ref类型

时间:2018-05-21 12:23:28

标签: json json.net jsonschema

我有以下架构,其中数组values只接受value类型的对象。我正在使用Newtonsoft.Json v11.0.2进行验证。

{
  "$schema": "http://json-schema.org/draft-07/schema",
  "$id": "http://some.thing/json",
  "type": "object",
  "definitions": {
    "value": {
      "$id": "/definitions/value",
      "required": ["a", "b", "c"],
      "properties": {
        "a": {
          "$id": "/properties/value/a",
          "type": "string"
        },
        "b": {
          "$id": "/properties/value/b",
          "type": "string"
        },
        "c": {
          "$id": "/properties/value/c",
          "type": "string"
        }
      }
    }
  },
  "required": ["values"],
  "properties": {
    "values": {
      "$id": "/properties/values",
      "type": "array",
      "items":
      {
        "$id": "/properties/values/item",
        "$ref": "/definitions/value"
      },
      "uniqueItems": true
    }
  }
}

这有效,因为它不会验证类似

的内容
{
  "values": [
    {
      "a": "a2",
      "b": "b2"
    }
  ]
}

但确实

{
  "values": [
    {
      "a": "a2",
      "b": "b2",
      "c": "c3"
    },
    "string"
  ]
}

它不应该。

如何强制只有value可以在数组中? "additionalItems": false限制了商品的数量,"additionalProperties": false限制了"商品"似乎什么都不做,所以这些也不是我想要的。

1 个答案:

答案 0 :(得分:1)

您正在尝试验证values数组的有效项,并且您的项目中的Object.preventExtensions() defintinition只会影响对象。

您需要在值定义中添加"additionalProperties": false ...

"type": "object"