Turn JSON records into a useful table
Paste an array of objects and choose Convert JSON. Columns include properties found in later rows, in first-seen order. Missing properties become empty fields. Review the table, then choose, rename or move individual columns before downloading. A single object becomes one row. Arrays of arrays use positional columns; arrays of scalar values use a single value column. Mixing objects, arrays and scalar rows is rejected so records are not silently reshaped.
Nested records and objects
Use JSON Pointer to select records inside an API response, for example /data/records. Pointer segments escape a literal slash as ~1 and a tilde as ~0. Expand nested objects when you need separate columns. Expanded names use the same escaping, keeping keys with dots, slashes or tildes distinct. Nested arrays and empty objects remain compact JSON in one cell; arrays are never multiplied into extra rows.
Keep values predictable
Numeric literals are carried directly into the CSV text, preserving large integers, decimal spelling, exponents and negative zero. String IDs such as 001 retain their characters. Nested JSON is compacted without rounding numbers. Duplicate JSON keys are rejected because a table cannot represent them unambiguously. JSON strings decode their escapes into real characters; isolated Unicode surrogates and NUL string cells are rejected.
Missing properties always become empty fields. JSON null also becomes empty unless you choose the text null. Empty strings, missing values and null can therefore look identical in CSV. The source table labels them separately so you can decide before exporting. CSV has no type metadata: spreadsheets can interpret numbers, dates and leading zeros. Use the spreadsheet's import dialog and Text column type when exact text matters.
CSV quoting and formula-like text
Commas, quotes, record breaks and leading/trailing whitespace are quoted; quotes inside a field are doubled. Choose another separator, LF endings, all-field quoting or a UTF-8 BOM when your importing application requires it. Every nonempty record set has a final record ending. Copy and Download use the same complete output, including a selected BOM.
By default, formula-like string cells and headings receive an apostrophe prefix. This is an explicit text change; the result reports how many cells changed. Detection includes =, +, -, @, their full-width variants after whitespace, and leading tab/record breaks. Actual JSON number tokens are not prefixed. There is no universal protection across spreadsheet applications or save/reopen cycles; see OWASP's CSV injection guidance. Disable the option for exact data interchange and import untrusted text as Text.
Local processing and recovery
Files stay in your browser. Import, example, clear and large paste support one replacement Undo, including previous column settings and record selection. Try example resets the record path; Undo restores it. Undo also restores export options, the source filename and your place in the table. A first conversion focuses the table for review; updating existing data takes you to the CSV preview. Ordinary typing clears that history. Matching source structure retains column choices on reread. Source and option changes hide obsolete output. Download your result before leaving; there is no automatic saving.
Input is limited to 1 MiB UTF-8, 100 nested container levels and 100,000 JSON values. Output is limited to 10,000 rows, 200 columns, 200,000 cells and 4 MiB. An empty array produces no CSV records; rows with no fields need a different selection. File reading and conversion have ten-second deadlines and Cancel. The text preview stops at 32,768 characters; exports are complete. For the reverse workflow, use CSV to JSON.