gpt4 book ai didi

用于根据另一个对象的内容验证对象值的 Json 模式

转载 作者:行者123 更新时间:2023-12-01 12:25:01 24 4
gpt4 key购买 nike

我正在尝试为文档创建 json 模式,其中某个对象中的字段值应根据同一文档中另一个对象中定义的枚举进行验证。
更具体地说,在下面的示例中,我希望能够使用 id 定义“属性”和 values (我应该能够在不同的 json 文件中定义不同的属性)。
那么“对象”应该能够引用这些属性,这样object.properties[i].id必须与属性之一的 id 和 object.properties[i].value 匹配必须与为该属性定义的枚举值之一匹配。

{
"properties": [
{
"id": "SIZE",
"values": ["small", "medium", "big"]
},
{
"id": "MATERIAL",
"values": ["wood", "glass", "steel", "plastic"]
},
{
"id": "COLOR",
"values": ["red", "green", "blue"]
}
],

"objects": [
{
"name": "chair",
"properties": [
{
"id": "SIZE",
"value": "small"
},
{
"id": "COLOR",
"value": "red"
}
],
},
{
"name": "table",
"properties": [
{
"id": "MATERIAL",
"value": "wood"
}
]
}
]
}
我试图创建 json 模式来验证这种结构,但在描述对“属性”对象的内部字段的引用时遇到了麻烦。我还查看了 standard并没有找到实现目标的方法。
是否可以创建一个 json 模式来验证我的 json 文件?

最佳答案

$data reference有提案如果您稍微更改数据结构以删除一级间接,这几乎允许这样做。它是 supported in Ajv (我是作者)。

因此,如果您的数据是:

{
"properties": {
"SIZE": ["small", "medium", "big"],
"MATERIAL": ["wood", "glass", "steel", "plastic"],
"COLOR": ["red", "green", "blue"]
},
"objects": {
"chair": {
"SIZE": "small",
"COLOR": "red"
},
"table": {
"MATERIAL": "wood"
}
}
}

那么你的架构可能是:
{
"type": "object",
"properties": {
"properties": {
"type": "object",
"additionalProperties": {
"type": "array",
"items": { "type": "string" }
}
},
"objects": {
"type": "object",
"additionalProperties": {
"type": "object",
"properties": {
"SIZE": {"enum": {"$data": "3/properties/SIZE"}},
"MATERIAL": {"enum": {"$data": "3/properties/MATERIAL"}},
"COLOR": {"enum": {"$data": "3/properties/MATERIAL"}}
}
}
}
}
}

它可以根据所有可能的属性列表动态生成。

使用您拥有的数据结构,您可以使用自定义关键字(如果验证器支持它们)或在 JSON 模式之外实现验证逻辑的某些部分。

关于用于根据另一个对象的内容验证对象值的 Json 模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40741989/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com