Data Format Converter (JSON/YAML/TOML/CSV)
Free online data format converter. Convert between JSON, YAML, TOML, and CSV entirely in your browser — no upload, no server round-trip.
Why one converter instead of six separate tools
JSON, YAML, and TOML are all ways of writing down the same underlying thing — a tree of objects, arrays, strings, numbers, and booleans — they just differ in syntax and a few structural rules (TOML has no null, CSV has no nesting at all). That means converting between any pair of them is really the same two-step operation every time: parse the source format into that shared in-memory structure, then serialize the structure back out in the target format's syntax. Building one tool with a "from" and "to" picker around that shared structure, instead of six separate hardcoded pairs, is both less code and the more honest representation of what conversion between structured formats actually is.
Why CSV is the odd one out
CSV has no concept of nesting — it's fundamentally a flat grid of rows and columns, unlike JSON/YAML/TOML which can nest objects inside objects arbitrarily deep. Converting a nested JSON document to CSV is therefore lossy by nature, not a limitation of this tool specifically: this converter handles it by expecting an array of flat objects (each object becomes one row, its keys become the column headers) and JSON-encoding any value that's itself an object or array into that cell, so the data survives even if it doesn't become tidy spreadsheet columns. Going the other direction, CSV to JSON/YAML/TOML, is always safe since a flat structure fits inside a nested one with no loss.
Why TOML rejects some inputs the others accept
TOML is deliberately more constrained than JSON or YAML: every TOML file is a table (an object) at the top level, so a bare array or a lone string can't round-trip into TOML without first being wrapped in an object with a key. TOML also has no `null` — there's no syntax for "this key has no value" the way JSON's `null` or YAML's `~` do, so a value that's null anywhere in the source gets flagged with the exact key path it was found at rather than being silently dropped or turned into an empty string, since either of those would quietly change what the data means.