JSON to Haskell
Generate Haskell classes/structs automatically from a JSON object.
What is JSON to Haskell?
This free online tool turns a sample JSON payload into a ready-to-use data type (record) for Haskell, so you can use this json to haskell data type generator tool to go straight from raw JSON to a typed data type / record without writing the boilerplate yourself. It is built around Haskell's actual idiom — a Haskell record — rather than a generic one-size-fits-all class, and pairs naturally with Aeson for real-world (de)serialization. Use it for json to haskell record online or any time you need aeson json to haskell type, whether you're scaffolding a new Haskell project or mapping an existing API response.
Technical Execution
Paste or upload a sample JSON object or array and the tool walks its structure field by field, inferring a concrete Haskell type for each value — mapping basic JSON types to `Text`/`String`, `Int`/`Double`, and `Bool` as appropriate. For nested data, it defines a separate record data type with its own `FromJSON` instance for every nested JSON object, and types arrays as `[T]` using Haskell's native list syntax. On the naming side, it converts snake_case or camelCase JSON keys into Haskell's camelCase record-field convention (often prefixed to avoid field-name clashes between records), and generates the matching `FromJSON`/`ToJSON` instances via Aeson's `Options` so the original key is preserved on the wire. For optional data, fields observed as `null`, or missing from some sample objects, are typed as `Maybe T`, and the generated `FromJSON` instance uses `.:?` instead of `.:` so Aeson parses a missing key as `Nothing` rather than failing.
Zero Data Storage Guarantee
Everything runs client-side in your browser: the sample JSON you paste in — which may contain real field names, endpoint shapes, or structure from a private API or project — is parsed and converted entirely on your device and is never uploaded to any server. Nothing you enter is logged, stored, or transmitted anywhere, so you can safely paste a real payload from an internal or unreleased API to generate an accurate Haskell record. Closing or refreshing the tab clears everything, since no copy of your data ever left your machine in the first place.
How to Use JSON to Haskell (Step-by-Step Guide)
- Copy a representative sample of your JSON (the more fields and nested objects it includes, the more complete the generated data type / record will be).
- Paste it into the input panel of the JSON to Haskell tool, or click "Upload" to load it from a json file.
- Review the auto-detected root name, and rename it if you want the generated Haskell record to use a specific class or type name instead of the default.
- Click "Generate" to produce the Haskell data type / record, which appears instantly in the output panel with syntax highlighting.
- Click "Copy" to copy the generated code to your clipboard, or "Download" to save it as a `.hs` file.
- Paste the result into your Haskell project and adjust field names or types if your data has edge cases the sample didn't cover.