【发布时间】:2014-05-15 03:58:15
【问题描述】:
我想知道如何从其他文件中获取 json 架构。
假设我有两个文件,放在同一个目录下:
文件 1:person.json
{
"id":"#person",
"name": {"type":"string"},
"age": {"type":"number"},
"address": {
"type":"object",
"properties": {
"number": {"type":"number"},
"street": {"type":"string"},
"city": {"type":"string"}
}
}
}
文件 2:company.json
{
"id":"#company",
"name": {"type":"string"},
"employees": {
"type":"array",
"items" {"$ref":"person.json"}
}
}
如您所见,“员工”应该是“人”的数组。问题是我不知道如何引用“人”模式,因为它在不同的文件中。
我知道这可能是一个简单的问题,并且可能已经有答案,但我已经研究了很多,但我不明白这是如何完成的。
编辑 1
我正在使用Tiny Validator 4 (tv4) 进行架构验证。我还使用 QUnit 来测试模式是否正常工作。
下面,我将向您展示一个测试,其中地址编号应该是数字类型时是布尔值。架构在不应该进行验证时进行验证。
asyncTest("invalid type for adress number", function() {
expect(1);
var jsonObject = {
name: 'Computers Inc',
employees: [
{
name: 'John',
age: 29,
address: {
number: 9,
street: 'Oak Street',
city: 'London'
}
},
{
name: 'Mike',
age: 35,
address: {
number: true,
street: 'Big Avenue',
city: 'London'
}
}
]
};
// Gets the JSON Schema
$.getJSON('json_schemas/company.json', function(response) {
var jsonSchema = response;
console.log(jsonSchema);
// Verifies the validity of the JSON object
var valid = tv4.validate(jsonObject, jsonSchema);
ok(!valid, "Not valid because Mike's number is a boolean.");
start();
});
});
看了一会,觉得是“$.getJSON”搞砸了。 “console.log(jsonSchema)”显示获取的架构不包括人员部分。获取的架构正是“company.json”文件中的架构。
编辑 2
我认为它是这样工作的。 :)
asyncTest("invalid type for address number", function() {
expect(1);
var jsonObject = {
name: 'Computers Inc',
employees: [
{
name: 'John',
age: 29,
address: {
number: 9,
street: 'Oak Street',
city: 'London'
}
},
{
name: 'Mike',
age: 35,
address: {
number: false,
street: 'Big Avenue',
city: 'London'
}
}
]
};
tv4.asyncValidate(jsonObject, 'json_schemas/company.json', function(valid) {
ok(!valid, printMessage(valid));
start();
});
});
【问题讨论】:
-
你在那里的东西看起来应该可以工作。你看到了什么问题?
-
感谢您的回答@cloudfeet。我在 EDIT 1 中添加了更多细节。获取模式进行验证似乎是一个问题。请你看一下好吗?再次感谢。 ;)
标签: file reference jsonschema