JSON Converter
100% CLIENT-SIDE
Raw JSON Array or Object
Converted Output (CSV / SQL)
More from JSONConvert
Flatten Nested JSON
Flatten nested JSON into single-level dotted keys (user.address.city, tags[0]) in your browser.
JSON to YAML Converter
Convert JSON to block-style YAML in your browser.
JSON to XML Converter
Convert JSON to indented XML in your browser.
Guides
Frequently Asked Questions
Is my data safe on jsonconvert.tools?
Yes. Conversion runs in your browser, so API responses you paste are never uploaded or stored.
What can I convert JSON into?
CSV and SQL INSERT statements on the home page, and YAML, XML, or flattened dotted-key JSON on their own tool pages. Each runs in your browser.
What happens to nested objects in the CSV and SQL converters?
They are not flattened. In CSV a nested value is written as JSON text inside one cell; in SQL it prints as [object Object], which is a deliberate loud signal. Run the JSON through the flatten tool first to get dotted-key columns such as user.address.city.
🧭 Pro Tips & Gotchas
What the converters do
- Array-of-objects in, one of two things out: CSV (first row becomes the header) or a SQL
INSERTwith keys as columns and values single-quoted. - Non-string values are stringified rather than dropped, so nested objects arrive as
[object Object]— a loud, if ugly, signal that the shape is wrong. - Strings are escaped by doubling single quotes, which is correct for PostgreSQL/SQLite/MySQL-in-default-mode but not for a database running with
NO_BACKSLASH_ESCAPESdisabled expectations.
Gotchas
- Ragged objects lose data: the header comes from the first record, so any key that only appears later is silently omitted from every row. Merge keys before converting.
null,undefined, and missing keys are not the same thing in JSON but often collapse to the same empty CSV cell, and an empty cell is notNULLon import — it is the empty string. Quote orNULL-cast explicitly.- The SQL output has no transactions, no
ON CONFLICT, and no batch limits. One giantINSERTwith 200k rows will hitmax_allowed_packeton MySQL and lock the table on Postgres; chunk it. - Booleans print as
true/false, which Postgres accepts and MySQL does not (it wants1/0). Dates print as ISO strings, which is fine fortimestamptzand a timezone trap fortimestamp. - For CSV: this is a convenience converter, not an RFC 4180 writer. Values containing commas, quotes, or newlines need quoting that a naive join does not provide — use Python
csv, Nodecsv-stringify, orCOPY ... TO CSVinstead. - Never paste generated SQL from untrusted JSON without review: an escaping bug plus a value containing
'); DROP TABLEis the whole exploit chain. Parameterised inserts exist for a reason.
Developer Sponsor / Partner