代码之家  ›  专栏  ›  技术社区  ›  SteveJ

如何在Pydantic.schema()中包含$id字段

  •  0
  • SteveJ  · 技术社区  · 3 年前

    根据 json-schema.org ,最好将$id字段包含在对象中。

    class MySchema(BaseModel):
    
        id: str = Field(default="http://my_url/my_schema.json", alias="$id")
    
    
    if __name__ == '__main__':
        pprint(MySchema.schema())
    

    {'properties': {'$id': {'default': 'http://my_url/my_schema.json',
                            'title': '$Id',
                            'type': 'string'}},
     'title': 'MySchema',
     'type': 'object'}
    

    如何在顶层获取$id,包括标题和类型,而不是作为嵌套属性?

    1 回复  |  直到 3 年前
        1
  •  1
  •   alex_noname    3 年前

    Pydantic provides schema_extra 配置选项:

    from pydantic import BaseModel
    
    
    class Person(BaseModel):
        name: str
        age: int
    
        class Config:
            schema_extra = {
                '$id': "my.custom.schema"
            }
    
    
    print(Person.schema_json(indent=2))
    

    输出:

    {
      "title": "Person",
      "type": "object",
      "properties": {
        "name": {
          "title": "Name",
          "type": "string"
        },
        "age": {
          "title": "Age",
          "type": "integer"
        }
      },
      "required": [
        "name",
        "age"
      ],
      "$id": "my.custom.schema"
    }
    
    推荐文章