Skip to content
All tools

Developer Tools

Convert between JSON, CSV and YAML with nesting handled for you. Write Markdown and save it as a page or PDF. Compare two versions of some text, change its case, clean up its spacing, and encode or decode Base64, URLs and JWTs.

See how this works

Everything happens on your device — your files are never uploaded

Input

Paste data, drop a file, or load an example

Waiting for input
Example

Nothing loaded yet

.json · .csv · .tsv · .yaml · .yml · .txt — opened in this tab, never uploaded

Output

Your converted data will appear here

Nothing to show yet

Paste something on the left, drop a file, or load one of the examples.

Saved straight from this tab

How nesting is flattened and rebuilt

The six rules that decide whether a round trip comes back unchanged.

Nested objects become dotted columns
{ "address": { "city": "London" } } flattens to a column called address.city, and rebuilds into a real object on the way back.
Arrays become numbered columns
tags.0, tags.1, tags.2 — and any path segment that is bare digits turns back into an array rather than an object.
Keys that contain a dot still work
A key written literally as "a.b" is escaped in the header as a\.b, so it is never mistaken for two levels of nesting. A key that is only digits is escaped the same way.
Empty cells and nulls are different things
A null is written as the word null. An empty cell reads back as an empty string — except under an array index, where it is treated as a gap so ragged lists keep their length.
Type reading is a choice, not a guess you are stuck with
By default 42 becomes a number and true a boolean. Leading zeros, very long digit strings and anything that would lose precision are always kept as text. Turn the toggle off to keep every cell exactly as typed.
Converting to the same format just tidies it
JSON and YAML are re-indented. CSV is re-quoted and given the delimiter you picked, with every cell value left byte-for-byte alone.