当前位置: 首页 > 知识库问答 >
问题:

Json模式验证同一对象上的引用属性

濮阳宁
2023-03-14

使用JSON Schema 7执行验证

是否可以使用json模式进行以下验证。

 {
    properties : [{name: "a"}, {name: "b"}, {name: "c"}],
    rules : [{ prop : ["a","b"] }, { prop : ["a"] }, {prop: ["c"]}]
 }

object 中的“prop” 属性是属性中的依赖值。

即只有“properties.name”存在,那么该值可以添加到“prop”数组

注意:

  • “属性”数组可以具有{name:}
  • 类型的任何对象
  • “name”可以有任何可能的字符串,我事先不知道

我一直在查阅文件,但能找到一个答案。

Json Schema中还不支持此验证吗?

共有1个答案

壤驷承
2023-03-14

您不能使用静态JSON模式来执行此操作。

要将其存档,需要动态模式验证,但这可能会对恶意用户的代码注入造成危险:

const Ajv = require('ajv')

const ajv = new Ajv({ allErrors: true, jsonPointers: true })

const data = {
  properties: [{ name: 'a' }, { name: 'b' }, { name: 'c' }],
  rules: [{ prop: ['a', 'b'] }, { prop: ['a', 'zz'] }, { prop: ['c'] }]
}

const validProp = data.properties.map(_ => _.name)

const schema = {
  type: 'object',
  required: ['properties', 'rules'],
  properties: {
    properties: {
      type: 'array',
      items: {
        type: 'object',
        required: ['name'],
        properties: {
          name: { type: 'string' }
        }
      }
    },
    rules: {
      type: 'array',
      items: {
        type: 'object',
        required: ['prop'],
        properties: {
          prop: {
            type: 'array',
            uniqueItems: true,
            items: {
              type: 'string',
              enum: validProp // here happen the validation
            }
          }
        }
      }
    }
  }
}

const isValid = ajv.validate(schema, data)
if (!isValid) {
  console.log(ajv.errors)
}
 类似资料:
  • 我试图使用另一个JSON模式来验证JSON模式。 要验证的JSON模式示例:https://jsonschema.net/home 验证上述模式的验证模式参考:https://github.com/ajv-validator/ajv/blob/master/lib/refs/json-schema-draft-07.json 从上面的中,如果我删除,我的JSON将变得无效。 我有什么方法可以定义根

  • 我一直在努力使我的JSON模式正确。我有一个属性,我必须根据它来确定所需的属性。下面是我的示例,我希望通过验证,因为不存在。 这是我希望通过验证的JSON 类似地,如果是,那么上述两个JSON的验证都应该通过。

  • 我正在寻找一个好的方法或框架,帮助我验证一个对象的属性。我从另一个库中获取对象,因此不能更改对象本身的任何内容。 null

  • 在C#中是否有任何验证器可以使用,即使没有指令,也会使额外的属性失败?

  • 我有一个用例,我将把一个json-schema作为输入,验证它,然后保存在我的系统中。稍后,我将获取json数据,我需要使用上面提到的json-schema来验证这些数据。给定这个场景,我需要执行两个级别的验证: 我使用的是json-schema-validator jar,只能找到第二级验证,在文档中找不到json-schema验证。例如:假设我们有以下示例json-schema:

  • 下面是使用的json文件(tasks.json) 错误:com.intuit.karate.exception.KarateException:javascript评估失败:字符串,引用错误:第1行中未定义“字符串” 我尝试了多种方法,如:obj1:“#(^schema)”,obj1:“#对象schema” 但无法解决问题。