📋 Generate from JSON Schema¶
Generate Pydantic models from JSON Schema definitions. See Supported Data Types for supported JSON Schema features.
🚀 Quick Start¶
📝 Example¶
person.json
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "Person",
"type": "object",
"properties": {
"firstName": {
"type": "string",
"description": "The person's first name."
},
"lastName": {
"type": "string",
"description": "The person's last name."
},
"age": {
"description": "Age in years which must be equal to or greater than zero.",
"type": "integer",
"minimum": 0
},
"friends": {
"type": "array"
},
"comment": {
"type": "null"
}
}
}
✨ Generated model.py
# generated by datamodel-codegen:
# filename: person.json
# timestamp: 2020-04-27T16:12:27+00:00
from __future__ import annotations
from typing import Any
from pydantic import BaseModel, Field, conint
class Person(BaseModel):
firstName: str | None = Field(None, description="The person's first name.")
lastName: str | None = Field(None, description="The person's last name.")
age: conint(ge=0) | None = Field(
None, description='Age in years which must be equal to or greater than zero.'
)
friends: list | None = None
comment: Any | None = None
Tuple validation¶
JSON Schema's prefixItems syntax lets you describe heterogeneous arrays.
When:
prefixItemsis present- no
itemsare specified minItems/maxItemsmatch the number of prefix entries
datamodel-code-generator emits precise tuple annotations.
Example¶
{
"$defs": {
"Span": {
"type": "object",
"properties": {
"value": { "type": "integer" }
},
"required": ["value"]
}
},
"title": "defaults",
"type": "object",
"properties": {
"a": {
"type": "array",
"prefixItems": [
{ "$ref": "#/$defs/Span" },
{ "type": "string" }
],
"minItems": 2,
"maxItems": 2
}
},
"required": ["a"]
}
from pydantic import BaseModel
class Span(BaseModel):
value: int
class Defaults(BaseModel):
a: tuple[Span, str]
📖 See Also¶
- 🖥️ CLI Reference - Complete CLI options reference
- 🔧 CLI Reference: Typing Customization - Type annotation options
- 🏷️ CLI Reference: Field Customization - Field naming and constraint options
- 📊 Supported Data Types - JSON Schema data type support