我想使用以下库gojsonschema
来验证json结构,
Currenlty我对以下示例提出了两个问题
https://github.com/xeipuuv/gojsonschema
#/definitions/....
是什么?它的目的是什么? {required: true, unique: true, pattern: '/^[A-Za-z0-9_\-\.]+$/'}
唯一的一点是,如果我在模式中提交了另一个名称,它应该是唯一的,我如何使用jsonschema验证它?
var schema = `
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"name": ...
"properties": {
"username": {"$ref": "#/definitions/name"},
更新
我发现的是这个 https://spacetelescope.github.io/understanding-json-schema/reference/regular_expressions.html
但是我应该如何在我提供的json中查看
应该是这样吗
var schema = `
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"name": {
"type": "object",
"pattern":'/^[A-Za-z0-9_\-\.]+$/'
}
"properties": {
"username": {"$ref": "#/definitions/name"},
答案 0 :(得分:2)
#/definitions/name
是另一个架构的internal reference。该文档的部分应如下所示:
"definitions": {
"name": {
...
}
}
JSON架构没有unique
验证程序。有一个uniqueItems验证程序可以与数组一起使用,但我不认为这就是您要查找的内容。
答案 1 :(得分:2)
https://datatracker.ietf.org/doc/draft-handrews-json-schema-validation/?include_text=1
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"username": {
"type": "array",
"items": {
"type": "string",
"pattern": "/^[A-Za-z0-9_\-\.]+$/"
},
"uniqueItems": true
}
},
"required": [
"username"
]
}
1:"定义"关键字提供标准化的位置 模式作者将可重用的JSON模式内联到更一般的模式中 架构。该关键字不会直接影响验证结果。
此关键字的值必须是一个对象。每个成员的价值 对象必须是有效的JSON模式。
作为一个例子,这里是一个描述积极数组的模式 整数,其中正整数约束是子模式 "定义":
{
"type": "array",
"items": { "$ref": "#/definitions/positiveInteger" },
"definitions": {
"positiveInteger": {
"type": "integer",
"exclusiveMinimum": 0
}
}
}
2:uniqueItems
此关键字的值必须是布尔值。
如果此关键字的布尔值为false,则实例将进行验证 成功。如果它的布尔值为true,则实例将进行验证 成功,如果它的所有元素都是唯一的。
省略此关键字的行为与false值相同。
需要
此关键字的值必须是数组。这个数组的元素, 如果有的话,必须是字符串,并且必须是唯一的。
如果对象实例中的每个项目都对该关键字有效 array是实例中属性的名称。
省略此关键字与空数组具有相同的行为。
属性
{
"type": "object",
"properties": {
"progBinaryName": {
"type": "string",
"pattern": "^[A-Za-z0-9 -_]+_Prog\\.(exe|EXE)$"
}
}
}
"属性的价值"必须是一个对象。这个的每个值 对象必须是有效的JSON模式。
此关键字确定子实例如何验证对象,以及 不直接验证直接实例本身。
如果,对于出现在两者中的每个名称,验证成功 实例以及作为此关键字值的名称,即孩子 该名称的实例成功验证了 相应的架构。
省略此关键字与空对象具有相同的行为。