gpt4 book ai didi

json - JSON模式$ ref不适用于相对路径

转载 作者:行者123 更新时间:2023-12-04 03:27:18 26 4
gpt4 key购买 nike

我有3个架构:

子架构:

{
"title": "child_schema",
"type": "object",
"properties": {
"wyx":{
"type": "number"
}
},
"additionalProperties": false,
"required": ["wyx"]
}


父模式:

{
"title": "parent",
"type": "object",
"properties": {
"x": {
"type": "number"
},
"y": {
"type": "number"
},
"child": {
"$ref": "file:child.json"
}
}
}


祖父模式:

{
"type": "object",
"title": "grandpa",
"properties": {
"reason": {
"$ref": "file:parent.json"
}
},
"additionalProperties": false
}


如您所见,gradpa引用了parent,parent引用了child。
所有这3个文件都在同一文件夹中。
当我使用python验证器来验证爷爷架构时,我将继续收到一个称为RefResolutionError的错误。

但是,如果我没有爷爷,而我只使用父模式和子模式,那么一切都会正常!所以问题是我不能有一个指向ref(2 level)的ref。但是我可以有一个引用指向一个架构(仅1级)。

我想知道为什么

最佳答案

您的引用不正确。如果引用的方案位于同一文件夹中,请使用简单的相对路径引用,例如:

"child": {"$ref": "child.json"},
"reason": {"$ref": "parent.json"}


如果您使用 jsonschema进行验证,请不要忘记设置一个引用解析器,以解析引用架构的路径:

import os
from jsonschema import validate, RefResolver

instance = {}
schema = grandpa

# this is a directory name (root) where the 'grandpa' is located
schema_path = 'file:///{0}/'.format(
os.path.dirname(get_file_path(grandpa)).replace("\\", "/"))
resolver = RefResolver(schema_path, schema)
validate(instance, schema, resolver=resolver)

关于json - JSON模式$ ref不适用于相对路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25145160/

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