Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何根据python代码中元素的规则定义json模式?_Python_Jsonschema - Fatal编程技术网

如何根据python代码中元素的规则定义json模式?

如何根据python代码中元素的规则定义json模式?,python,jsonschema,Python,Jsonschema,我正在定义一个非常复杂和嵌套的json模式。我计划使用多个模式文件来保持模式更清晰,并按主要部分进行分区,并使用$ref将它们合并为一个。我拥有的验证器函数已经可以处理这个问题,我已经用几个较小的玩具模式示例进行了测试 我的问题是,我只有一个json示例,因此,我无法仅从示例中推断模式,因为许多元素都具有正则表达式模式和最小-最大条件。我所拥有的是所有元素的表格地图,包括它们的名称、类型、有效范围。。。 我从数据实例和示例中查找了不同的json模式生成器(GenSON、jsonschema.ne

我正在定义一个非常复杂和嵌套的json模式。我计划使用多个模式文件来保持模式更清晰,并按主要部分进行分区,并使用
$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模式的大用户