Json 架构。如何根据另一个属性值验证属性键?

标签 json jsonschema

数据:

{
   "languages": ['en', 'ch'],
   "file": {
      "en": "file1",
      "ch": "file2"
    }
}

如何定义一个模式,通过“语言”属性验证文件属性中的键名?

{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "description": "",
  "type": "object",
  "properties": {
    "languages": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "file": {
      "type": "object",
      "properties": ????
    }
}

最佳答案

您可以使用一些验证器支持的自定义关键字来定义额外的数据约束,例如Ajv (我是作者):

var Ajv = require('ajv');
var ajv = new Ajv;
ajv.addKeyword('validateLocales', {
    type: 'object',
    compile: function(schema) {
        return function(data, dataPath, parentData) {
            for (var prop in data) {
                if (parentData[schema.localesProperty].indexOf(prop) == -1) {
                    return false;
                }
            }
            return true;
        }
    },
    metaSchema: {
        type: 'object',
        properties: {
            localesProperty: { type: 'string' }
        },
        additionalProperties: false
    }
});

var schema = {
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "object",
  "properties": {
    "languages": {
      "type": "array",
      "items": { "type": "string" }
    },
    "file": {
      "type": "object",
      "validateLocales": {
          "localesProperty": "languages"
      },
      "additionalProperties": { "type": "string" }
    }
  }
};

var data = {
   "languages": ['en', 'ch'],
   "file": {
      "en": "file1",
      "ch": "file2"
    }
};

var validate = ajv.compile(schema);
console.log(validate(data));

参见 https://runkit.com/esp/57d9d419646b97130082de34

关于Json 架构。如何根据另一个属性值验证属性键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39167985/

相关文章:

javascript - 类型错误 : Cannot Read Property "x" from undefined. 仅当我包含值数组时

ios - 使用 AFNetworking 解析 JSON 时清空 UITableView

ios - 如何使用 SwiftyJSON 解析字符串数组?

jsonschema:对象数组中的唯一属性

javascript - “存储” Mongoose 模式/模型(不是文档)以供将来使用

json - 如何使用 $ref 文件中的additionalProperties?

c# - 使用 Json.NET JsonSchemaGenerator 将 JSON Schema 属性(标题、描述)添加到 C# 类属性

json - Electron : What does curly braces '{}' mean in package json

ios - Swift uitableview json删除行

java - 如何在 JSON 模式 validator 中应用子模式?