Skip to content

📊 Generate from JSON / YAML / CSV Data

Generate Pydantic models directly from raw JSON, YAML, or CSV data. Under the hood, the generator uses GenSON to infer a JSON Schema from JSON/YAML input, or infers a schema from CSV rows, then processes it the same way as JSON Schema input.

🚀 Quick Start

datamodel-codegen \
    --input pets.json \
    --input-file-type json \
    --output-model-type pydantic_v2.BaseModel \
    --output model.py

Use --input-file-type yaml for raw YAML sample data and --input-file-type csv for CSV files. If a YAML file is a schema definition rather than sample data, use --input-file-type jsonschema, openapi, or asyncapi instead.

📝 Example

pets.json

{
  "pets": [
    {
      "name": "dog",
      "age": 2
    },
    {
      "name": "cat",
      "age": 1
    },
    {
      "name": "snake",
      "age": 3,
      "nickname": "python"
    }
  ],
  "status": 200
}

✨ Generated model.py

# generated by datamodel-codegen:
#   filename:  pets.json
#   timestamp: 2020-04-27T16:08:21+00:00

from __future__ import annotations

from pydantic import BaseModel


class Pet(BaseModel):
    name: str
    age: int
    nickname: str | None = None


class Model(BaseModel):
    pets: list[Pet]
    status: int


📖 See Also