如何根据python代码中元素的规则定义json模式?
我正在定义一个非常复杂和嵌套的json模式。我计划使用多个模式文件来保持模式更清晰,并按主要部分进行分区,并使用如何根据python代码中元素的规则定义json模式?,python,jsonschema,Python,Jsonschema,我正在定义一个非常复杂和嵌套的json模式。我计划使用多个模式文件来保持模式更清晰,并按主要部分进行分区,并使用$ref将它们合并为一个。我拥有的验证器函数已经可以处理这个问题,我已经用几个较小的玩具模式示例进行了测试 我的问题是,我只有一个json示例,因此,我无法仅从示例中推断模式,因为许多元素都具有正则表达式模式和最小-最大条件。我所拥有的是所有元素的表格地图,包括它们的名称、类型、有效范围。。。 我从数据实例和示例中查找了不同的json模式生成器(GenSON、jsonschema.ne
$ref
将它们合并为一个。我拥有的验证器函数已经可以处理这个问题,我已经用几个较小的玩具模式示例进行了测试
我的问题是,我只有一个json示例,因此,我无法仅从示例中推断模式,因为许多元素都具有正则表达式模式和最小-最大条件。我所拥有的是所有元素的表格地图,包括它们的名称、类型、有效范围。。。
我从数据实例和示例中查找了不同的json模式生成器(GenSON、jsonschema.net…)
作为一个例子,考虑下面的JSON模式元素的逻辑/规则:
Level Element Type ... Pattern ... (exclusive) min (exclusive) max default
1 VersionDate string ([0-9]{8})
1 Pairs array
2 a integer ... False 0 0
2 b number ... False 0.0 False 99.5 0
2 c number ... False 0.0 True 10000 0
我想要的是一种干净的方法来解析上表的行,并以编程的方式添加到json模式对象中。这样做的原因是能够有一个可复制的模式生成器,我可以在其中调整或移动内容
如有任何提示/建议,我将不胜感激
{
"VersionDate": {
"$id": "#/properties/VersionDate",
"type": "string",
"title": "The Versiondate Schema",
"examples": [
"20160319"
],
"pattern": "^([0-9]{8})$"
},
"Pairs": {
"$id": "#/properties/Pairs",
"type": "array",
"title": "The PairsSchema",
"items": {
"$id": "#/properties/Pairs/items",
"type": "object",
"title": "The Items Schema",
"required": [
"a",
"b",
"c"
],
"properties": {
"a": {
"$id": "#/properties/Pairs/items/properties/a",
"type": "integer",
"title": "The a Schema",
"default": 0,
"examples": [
1234
],
"minimum": 0
},
"b": {
"$id": "#/properties/Pairs/items/properties/b",
"type": "number",
"title": "The b Schema",
"default": 0,
"examples": [
30.1
],
"minimum": 0,
"maximum": 99.5
},
"c": {
"$id": "#/properties/Pairs/items/properties/c",
"type": "number",
"title": "The c Schema",
"default": 0,
"examples": [
4.98
],
"minimum": 0,
"exclusivemaximum": 10000
}
}
}
}
}
试试棉花糖库。它也得到了验证。为什么要从创建的格式生成架构?模式生成器通常会产生不必要的噪音。为什么不把模式写下来呢?谢谢@MeysamAzad,我会查出来的。@Relequestual,我的格式(规则表)在格式上并不严格。因此,我可以灵活地改变这一点。我主要关心的是通过直接在json模式文件中查找/替换来减少人为错误,比如如果某个元素的regex模式或min/max发生了变化(如果有意义的话)。结构可能根本不会改变,但限制值和模板可能会随之改变。在这种情况下,您可能会对JSONNET感兴趣-英国政府是使用JSONnetTry
marshmallow
库构建JSON模式的大用户。它也得到了验证。为什么要从创建的格式生成架构?模式生成器通常会产生不必要的噪音。为什么不把模式写下来呢?谢谢@MeysamAzad,我会查出来的。@Relequestual,我的格式(规则表)在格式上并不严格。因此,我可以灵活地改变这一点。我主要关心的是通过直接在json模式文件中查找/替换来减少人为错误,比如如果某个元素的regex模式或min/max发生了变化(如果有意义的话)。结构可能根本不会改变,但限制值和模板可能会随之改变。在这种情况下,您可能会对JSONNET感兴趣-英国政府是使用JSONNET构建JSON模式的大用户