json schema - 要求对象没有特定名称

时间:2018-05-19 01:21:24

标签: jsonschema

我想基于以下设置对象创建一个json架构(draft-06):

"settingData" : {
  "$id": "#settingData",
  "oneOf" : [
    { "type"  : "number" },
    { "type" : "array", "items" : { "oneOf" : [ { "type" : "number"},{ "type" : "null" } ] } },
    { "type" : "array", "items" : { "$ref" : "#setting" } }
  ]
},
"setting" : {
  "$id": "#setting",
  "type" : "object",
  "properties" : {
    "name": {
      "type": "string",
      "title": "type of setting",
      "examples": [
        "led-brightness"
      ]
    },
    "data": {
      "$ref" : "#settingData"
    }
  },
  "required" : ["type","data"]
},

我想创建一个这个对象的专门化,它有一个设置名称" status-ranges"并且包含上述定义的子集。 如何获得我的上述类型"设置"如果名称是"状态范围"则不适用。 我想过使用模式,但是匹配除了某个字符串之外的所有内容的正则表达式模式看起来有点特别,我尝试了一个并且它没有用。然后是关键字,但我仍然在寻找可以应用的示例。 有任何想法吗 ?

1 个答案:

答案 0 :(得分:0)

使用正则表达式对我有用:"模式":" ^((?!status-ranges)。)* $"在设置的名称属性中。这会从允许的名称中排除字符串"状态范围。专业'然后设置const名称" status-ranges",如下所示:

"settingData" : {
  "$id": "#settingData",
  "oneOf" : [
    { "type"  : "number" },
    { "type" : "array", "items" : { "oneOf" : [ { "type" : "number"},{ "type" : "null" } ] } },
    { "type" : "array", "items" : { "$ref" : "#setting" } }
  ]
},
"setting" : {
  "$id": "#setting",
  "type" : "object",
  "properties" : {
    "name": {
      "type": "string",
      "pattern": "^((?!status-ranges).)*$",
      "title": "type of setting",
      "examples": [
        "led-brightness"
      ]
    },
    "data": {
      "$ref" : "#settingData"
    }
  },
  "required" : ["type","data"]
},
"statusRange" : {
  "$id": "#statusRange",
  "type" : "object",
  "properties" : {
    "name": {
      "const": "status-ranges"
    },
    "data": {
      "$ref" : "#settingData"
    }
  },
  "required" : ["type","data"]
},

我仍然想知道"不是"但是在JSON Schema中工作。