Javascript 如何在json模式中定义替代结构

Javascript 如何在json模式中定义替代结构,javascript,json,jsonschema,Javascript,Json,Jsonschema,我得到的JSON文件可以如下所示: { "api": "http://my.api.host", "modules": [ "core", "module", "another" ] } 或者这个: { "api": "http://my.api.host", "modules": "*" } 请注意,模块属性的值可以是数组,也可以是*字符串。我如何在JSON模式中做到这一点?我使用priceless创建了以下仅验证阵列的结构: {

我得到的JSON文件可以如下所示:

{
    "api": "http://my.api.host",
    "modules": [
        "core", "module", "another"
    ]
}
或者这个:

{
    "api": "http://my.api.host",
    "modules": "*"
}
请注意,
模块
属性的值可以是数组,也可以是
*
字符串。我如何在JSON模式中做到这一点?我使用priceless创建了以下仅验证阵列的结构:

{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "id": "http://jsonschema.net",
  "type": "object",
  "additionalProperties": true,
  "properties": {
    "api": {
      "id": "http://jsonschema.net/api",
      "type": "string",
      "minLength": 1
    },
    "modules": {
      "id": "http://jsonschema.net/modules",
      "type": "array",
      "minItems": 1,
      "uniqueItems": false,
      "additionalItems": true,
      "items": {
        "id": "http://jsonschema.net/modules/2",
        "type": "string",
        "minLength": 1
      }
    }
  },
  "required": [
    "api",
    "modules"
  ]
}

我如何在JSON模式中做出选择?

我已经找到了答案,基于另一个(略有不同)。解决方案是使用它来定义至少一个必须匹配的备选子模式。我的案例的一个示例解决方案是:

{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "id": "http://jsonschema.net",
  "type": "object",
  "additionalProperties": true,
  "properties": {
    "api": {
      "id": "http://jsonschema.net/api",
      "type": "string",
      "minLength": 1
    },
    "modules": {
      "id": "http://jsonschema.net/modules",
      "anyOf": [{
        "type": "array",
        "minItems": 1,
        "uniqueItems": true,
        "items": {
          "id": "http://jsonschema.net/modules/2",
          "type": "string",
          "minLength": 1
        }
      }, {
        "type": "string",
        "minLength": 1
      }]
    }
  },
  "required": [
    "api",
    "modules"
  ]
}