我正在尝试使用JSON Schema验证JSON文件,以便查找“已损坏的引用”的情况。基本上我的文件由项目和组组成,每个项目属于groups属性键引用的单个组,如下所示:
{
"items": {
"banana": {
"name": "Banana",
"group": "fruits"
},
"apple": {
"name": "Apple",
"group": "fruits"
},
"carrot": {
"name": "Carrot",
"group": "vegetables"
},
"potato": {
"name": "Potato",
"group": "vegetables"
},
"cheese": {
"name": "Cheese",
"group": "dairy"
}
},
"groups": {
"fruits": {
"name": "Fruits"
},
"vegetables": {
"name": "Vegetables"
}
}
}
在上面的示例中,项cheese
被视为无效,因为dairy
对象中没有groups
属性。我试图使用以下架构验证这一点:
{
"$schema": "http://json-schema.org/draft-06/schema#",
"title": "Food",
"id": "food",
"type": "object",
"properties": {
"items": {
"type": "object",
"patternProperties": {
"^[A-Za-z0-9-_.:=]+$": {
"properties": {
"name": {
"type": "string",
"pattern": "^[A-Za-z- ]+$"
},
"group": {
"pattern": "^[a-z]+$",
"enum": {
"$data": "/groups"
}
}
}
}
}
},
"groups": {
"type": "object",
"patternProperties": {
"^[A-Za-z0-9-_]+$": {
"properties": {
"name": {
"type": "string",
"pattern": "^[A-Za-z- ]+$"
}
}
}
}
}
},
"additionalProperties": false
}
这会导致enum
的{{1}}由group
中的属性值填充,但我想要做的是使用属性 keys 在groups
中定义。
如果我添加一个属性,例如groups
并将其作为groupIds
中找到的所有属性键的数组,并将枚举指定为groups
它确实有效,因此我认为这是一个JSON指针问题。
JSON Schema中的"$data": "/groupIds"
关键字定义为:
此关键字的值必须是数组。这个数组应该至少有一个元素。数组中的元素应该是唯一的。
因此,如果我只能获取JSON指针来引用对象的键而不是其值,我想枚举验证就可以正常工作。我在考虑像enum
,"$data": "/groups/.keys"
或类似的东西,但在谷歌搜索或阅读规范时没有找到它。有这样的事情还是曾经提出过?
答案 0 :(得分:3)
没有这样的事情。它与JSON中的一般表达式非常接近,它可能有一些用例,但没有这样的规范。