gpt4 book ai didi

json - JSON Schema 是否支持深度对象验证?

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

我正在查看文档,但找不到任何直接或间接的解决方案。
有没有办法在不知道特定对象的确切位置的情况下对 JSON 对象进行验证?
例如,我想验证以下子对象:

{
"grandParent": {
"parent": {
"child": {
"name": "John"
}
}
}
}
该对象可以是更大的 JSON 文件的一部分,其结构如下:
{
"root": {
"someKey": {
"grandParent": ...
},
"grandParent": ...,
...<go in even deeper>: {
"grandParent": ...
}
}
}
我可以创建一个 json 模式来验证对象,无论它在哪里吗?
glob 中的类似示例是: root.**.grandParent.parent.child

最佳答案

您需要使用 additionalProperties 的组合, items , 和递归引用。
首先,我们定义要验证的结构。您必须定义 properties对于对象的每一层。
接下来,您希望您的根级别引用该定义。因为您使用的是预草案 2019-09 ,您需要将该引用包装在 allOf 中.
然后,您要确保对于对象,值应用了根架构,而对于数组,每个项目都应用了根架构。"$ref": "#"的使用解析为模式的根,它创建循环引用。
有些实现可能不喜欢这样,但大多数应该能够处理它。
这是以下架构的现场演示:https://jsonschema.dev/s/lBrZk

{
"$schema": "http://json-schema.org/draft-07/schema",
"definitions": {
"grandParentToChild": {
"properties": {
"grandParent": {
"properties": {
"parent": {
"properties": {
"child": {
"properties": {
"name": {
"type": "string"
}
}
}
}
}
}
}
}
}
},
"allOf": [
{
"$ref": "#/definitions/grandParentToChild"
}
],
"additionalProperties": {
"$ref": "#"
},
"items": {
"$ref": "#"
}
}

关于json - JSON Schema 是否支持深度对象验证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67313037/

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