【发布时间】:2015-06-23 14:02:24
【问题描述】:
我有一个定义多个属性的 json 架构。我已将 2 个属性移至定义并引用它们。我这样做是因为我想将它们组合在一起并以通用的方式对这些属性进行一些测试。这工作正常,所有 json 数据都像以前一样处理。
但是,我注意到当我将 json 模式文件读入我的 javascript 文件时,我只看到最后一个 $ref。我不知道这是什么原因。我真的需要知道所有引用的属性。
这是我的 json 架构的 sn-p(在文件 schemas/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' ]
【问题讨论】:
标签: javascript jsonschema