如何在 JSON 架构中定义嵌套数组,其中数组项的基本类型是特定类型
How to define nested arrays in JSON schema where the base type of array items is specific type
我正在使用 python's jsonschema 来验证 YAML 文件。我无法弄清楚如何做的一件事是允许嵌套数组但强制所有数组项的基本类型都是字符串。我需要此功能来处理 YAML 锚点。例如,我将如何构造架构以确保 a
、b
、c
、... 都是字符串?作为参考,我不知道这个数组是如何嵌套的,所以我认为使用简单的 anyOf
是行不通的。
["a", ["b", ["c"]], ...]
我参考了有关 recursion 的文档,这似乎是我需要的,我只是不太了解它,无法在这种情况下实施它。
理想情况下,我希望数组的所有基本项都是唯一的,但这可能要求太多,因为我可以在展平数组后轻松地在 python 中完成检查。
对于单级字符串数组:
{
"type": "array",
"items": {
"type": "string"
},
"uniqueItems": true
}
您可以使 items
模式递归,方法是允许它成为数组的数组或字符串:
{
"$defs": {
"nested_array": {
"type": "array",
"items": {
"anyOf": [
{ "type": "string" },
{ "$ref": "#/$defs/nested_array" }
]
},
"uniqueItems": true
}
},
"$ref": "#/$defs/nested_array"
}
参考:https://json-schema.org/understanding-json-schema/reference/array.html
我正在使用 python's jsonschema 来验证 YAML 文件。我无法弄清楚如何做的一件事是允许嵌套数组但强制所有数组项的基本类型都是字符串。我需要此功能来处理 YAML 锚点。例如,我将如何构造架构以确保 a
、b
、c
、... 都是字符串?作为参考,我不知道这个数组是如何嵌套的,所以我认为使用简单的 anyOf
是行不通的。
["a", ["b", ["c"]], ...]
我参考了有关 recursion 的文档,这似乎是我需要的,我只是不太了解它,无法在这种情况下实施它。
理想情况下,我希望数组的所有基本项都是唯一的,但这可能要求太多,因为我可以在展平数组后轻松地在 python 中完成检查。
对于单级字符串数组:
{
"type": "array",
"items": {
"type": "string"
},
"uniqueItems": true
}
您可以使 items
模式递归,方法是允许它成为数组的数组或字符串:
{
"$defs": {
"nested_array": {
"type": "array",
"items": {
"anyOf": [
{ "type": "string" },
{ "$ref": "#/$defs/nested_array" }
]
},
"uniqueItems": true
}
},
"$ref": "#/$defs/nested_array"
}
参考:https://json-schema.org/understanding-json-schema/reference/array.html