表示,对于给定的 属性 值,应该使用 json 模式存在同名的 属性?

Express that, for a given property value, a property with the same name should exist using json schema?

我正在尝试验证 json 文件,其中的一个元素有一个 属性,其中包含一个应该存在于 json 的另一部分的值。我正在使用 jsonschema Draft 07。

这是一个简单的小示例,展示了我试图在我的数据中验证的场景。

{
  "objects": {
    "object1": {
      "colorKey": "orange"
    }
  },
  "colors": {
      "orange": {
          "red": "FF",
          "green": "AF",
          "blue": "00"
      }
  }
}

如何验证 colorKey 的 'value'(在本例中为 'orange')确实作为 'colors' 对象的 属性 存在?数据未存储在数组中,只是定义了属性。

对于官方 JSON 架构... 您无法检查数据中的键是否与数据的值相同。 您无法从 JSON 实例中提取数据值以用于 JSON 架构。

也就是说,最受欢迎的验证器 ajv 实现了一些非官方扩展。其中之一是 $data.

示例取自:https://github.com/epoberezkin/ajv#data-reference

var ajv = new Ajv({$data: true});

var schema = {
  "properties": {
    "smaller": {
      "type": "number",
      "maximum": { "$data": "1/larger" }
    },
    "larger": { "type": "number" }
  }
};

var validData = {
  smaller: 5,
  larger: 7
};

ajv.validate(schema, validData); // true

这对使用您的架构的任何其他人都不起作用。