gpt4 book ai didi

JSON 架构 : Why does "constant" not validate the same way as a single-valued "enum"?

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

我有一个对象,它提供一种 Assets 版本的审计日志。它的几个属性( versionSource.metadataversionSource.files )是应该针对两个模式之一进行验证的对象,具体取决于它们的一个属性的值。我开始在我的子模式中使用一个常量(在 oneOf 内,但那是说所有子模式都经过验证(因此打破了 oneOf 因为不止一个验证。将其更改为单值不过,枚举有效。

为什么验证不同?

这是原始架构:

{
"$id": "https://example.com/schemas/asset-version.json",
"title": "Audit log of asset versions",
"$schema": "http://json-schema.org/draft-07/schema",

"type": "object",
"required": [
"assetID",
"version",
"versionSource"
],

"properties": {
"assetID": {
"type": "string"
},
"version": {
"type": "integer",
"minimum": 1
},
"versionSource": {
"type": "object",
"properties": {
"metadata": {
"type": "object",
"oneOf": [
{
"properties": {
"sourceType": { "constant": "client" }
}
},
{
"$ref": "#/definitions/version-source-previous-version"
}
]
},
"files": {
"type": "object",
"oneOf": [
{
"properties": {
"sourceType": { "constant": "upload" },
"sourceID": {
"type": "string"
}
}
},
{
"$ref": "#/definitions/version-source-previous-version"
}
]
}
}
}
},

"definitions": {
"version-source-previous-version": {
"properties": {
"sourceType": { "constant": "previous-version" },
"sourceID": {
"type": "integer",
"minimum": 1
}
}
}
}
}

这是一个示例文档:
{
"assetID": "0150a186-068d-43e7-bb8b-0a389b572379",
"version": 1,
"versionSource": {
"metadata": {
"sourceType": "client"
},
"files": {
"sourceType": "upload",
"sourceID": "54ae67b0-3e42-464a-a93f-3143b0f078fc"
}
},
"created": "2018-09-01T00:00:00.00Z",
"lastModified": "2018-09-02T12:10:00.00Z",
"deleted": "2018-09-02T12:10:00.00Z"
}

还有一个:
{
"assetID": "0150a186-068d-43e7-bb8b-0a389b572379",
"version": 2,
"versionSource": {
"metadata": {
"sourceType": "previous-version",
"sourceID": 1
},
"files": {
"sourceType": "previous-version",
"sourceID": 1
}
},
"created": "2018-09-01T00:00:00.00Z",
"lastModified": "2018-09-02T12:10:00.00Z",
"deleted": "2018-09-02T12:10:00.00Z"
}

这是我得到的错误:

消息:JSON 对来自“oneOf”的多个架构有效。有效的架构索引:0、1。
架构路径:
https://example.com/schemas/asset-version.json#/properties/versionSource/properties/metadata/oneOf

sourceTypeoneOf 中的两个模式中都是常量,我真的不确定我的对象如何可能对两种模式都有效。

但是,将架构更改为以下内容有效:
{
"$id": "https://example.com/schemas/asset-version.json",
"title": "Audit log of asset versions",
"$schema": "http://json-schema.org/draft-07/schema",

"type": "object",
"required": [
"assetID",
"version",
"versionSource"
],

"properties": {
"assetID": {
"type": "string"
},
"version": {
"type": "integer",
"minimum": 1
},
"versionSource": {
"type": "object",
"properties": {
"metadata": {
"type": "object",
"oneOf": [
{
"properties": {
"sourceType": { "enum": [ "client" ] }
}
},
{
"$ref": "#/definitions/version-source-previous-version"
}
]
},
"files": {
"type": "object",
"oneOf": [
{
"properties": {
"sourceType": { "enum": [ "upload" ] },
"sourceID": {
"type": "string"
}
}
},
{
"$ref": "#/definitions/version-source-previous-version"
}
]
}
}
}
},

"definitions": {
"version-source-previous-version": {
"properties": {
"sourceType": { "enum": [ "previous-version" ] },
"sourceID": {
"type": "integer",
"minimum": 1
}
}
}
}
}

我错过了什么?

最佳答案

这是我自己的错别字... constant应该是const . :脸掌:

关于JSON 架构 : Why does "constant" not validate the same way as a single-valued "enum"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48389997/

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