JSON to Python dataclass
Generate Python @dataclass definitions with type annotations from JSON. Nested objects become sibling dataclasses. Free, browser-only. Walks your example, infers nested types, emits ready-to-paste code.
What you'll use this for
Schema inference from a real example: faster than writing types by hand, deterministic enough to commit.
API typing
Lock down the shape of a third-party JSON API in your codebase.
Backend integration
Generate matching client and server types so the wire stays in sync.
Schema generation
Bootstrap a schema from real data, then trim and annotate.
Code-gen tooling
One-off, deterministic mapping when you don't need a full code-gen pipeline.
How to generate Python dataclass from JSON
Paste your JSON
Drop a representative example into the left editor. Keys, types and nesting are inferred from this sample.
Set root class name
Defaults to Root. Anything in PascalCase works.
Click Generate
Or leave auto-generate on. Runs entirely in your browser — nothing uploads.
Copy or download
Copy the Python dataclass to clipboard or save as a file.
Frequently asked questions
Nested objects become separate types named after the field. Arrays are typed by their first element — supply a representative item.
No — every top-level field is treated as required. Provide an example that includes the optional fields, then widen the type manually if needed.
Yes. No signup, no limits, no ads. Runs entirely in your browser.
Null becomes Optional[Any] from typing. Imports are added automatically.
No — this is a one-way schema-inference tool. To go from code back to a JSON sample, use the language's native serializer (json.dumps, serde_json::to_string, JSON.stringify, etc).
About JSON to Python dataclass
PEP 557 @dataclass output — auto-generated __init__, __repr__, and __eq__. Lightweight alternative to Pydantic when you don't need validation.
How inference works
- Strings → string. Booleans → bool. Numbers → integer or float depending on whether the value is whole.
- Arrays take their first element as the prototype — supply a representative item.
- Nested objects become separate types named after the parent field, in PascalCase.
nullfalls back to a language-specific "any nullable" type — narrow it manually.
Limits
- One example, one shape. Fields that vary between samples aren't merged — pick the most representative record.
- No discriminated unions, no enums, no tuple types — inference picks the simplest match.
- Field names are kept verbatim where the target language allows; otherwise converted to the language's convention.