如何在JSON模式中定义嵌套数组,其中数组项的基类型为特定类型



我使用python的jsonschema来验证YAML文件。我不知道怎么做的一件事是允许嵌套数组,但强制所有数组项的基本类型都是字符串。我需要这个功能来处理YAML锚。例如,我如何构建模式以确保a,b,c,…都是字符串吗?作为参考,我不知道这个数组是如何嵌套的,所以我不认为使用简单的anyOf会起作用。

["a", ["b", ["c"]], ...]

我参考了关于递归的文档,这似乎是我需要的,我只是对它的理解不够好,无法在这种情况下实现。

理想情况下,我希望数组的所有基本项都是唯一的,但这可能要求太多,因为我可以在将数组平面化后轻松地在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

最新更新