javascript – JSON Schema:使用require读取文件时删除多个$ref

我有一个json模式定义了几个属性.我已将2个属性移动到定义中,并引用它们.我这样做是因为我想将它们组合在一起并以通用方式对这些属性进行一些测试.这工作正常,所有的json数据都像以前一样处理.

但是,我注意到当我将json模式文件读入我的javascript文件时,我只看到最后一个$ref.我不知道是什么原因造成的.我真的需要知道引用的所有属性.

这是我的json模式的片段(在文件模式/ schema1.json中):

{
    "type": "object",
    "properties": {
         "$ref": "#/definitions/groupedProperties/property1",
         "$ref": "#/definitions/groupedProperties/property2"
    },
    "definitions": {
        "groupedProperties": {
            "type": "object",
            "properties": {
                "property1": {
                    "type": "string"
                },
                "property2": {
                    "type": "string"
                }
            }
        }
    }
}

然后我将它读入我的js文件中(在文件test.js中):

var schemas = requireDir('./schemas')
for (var prop in schemas['schema1'].properties) {
    console.log(prop)
}

当我从我的js文件遍历模式中的属性时,我只能看到一个$ref.我想这是因为它认为属性名称是’$ref’,并且只能有唯一的名称.是否有某种方式我需要这个文件,以便第一个$ref不被破坏?

编辑:我的语法没有传递json模式验证器,虽然我不知道为什么,所以我没有挣扎,而是决定采用不同的方式.我想要的只是一种对某些属性进行分组的方法,因此我将这些属性放回主模式中,并将定义更改为包含该组的属性名称的枚举.所以现在我的架构看起来像:

{
    "type": "object",
    "properties": {
        "property1": {
            "type": "string"
        },
        "property2": {
            "type": "string"
        }
    },
    "definitions": {
        "groupedProperties": {
            "enum": ["property1", "property2"]
        }
    }
}

然后在我的js文件中:

var myGroup = (schema.definitions ? schema.definitions.groupedProperties : [])
console.log(myGroup.enum) // [ 'property1', 'property2' ]

解决方法:

这与require无关,对象键不是唯一的(因为你可以在一个对象中多次声明它们),但它们是可覆盖的(与声明两次的变量可被覆盖的方式相同).您只会收到两个具有相同名称的键上声明的最后一个值.

我建议给refs一个区别ID,这也有助于你的代码扩展时的清晰度

上一篇:java – 从pojo生成JsonSchema:如何自动添加“description”?


下一篇:0605. Can Place Flowers (E)