JSON to CSV

Convert a JSON array of objects into CSV you can open in Excel or Sheets. Free, in your browser.

Flattens an array of JSON objects into CSV, in your browser.

Free to use — premium coming soon

FREE
  • Auto columns
  • Copy & download
  • 100% private
PREMIUM
  • Remove ads
  • Custom delimiters & nested flattening

About the JSON to CSV

JSON to CSV turns an array of objects into a flat table you can open in a spreadsheet. Each object in the array becomes one row, and each unique key across those objects becomes a column header. It is the conversion you reach for when data arrives in JSON form, from a REST API response, a MongoDB or Firestore export, a web-scraping run, or a log file, but the person who needs it lives in Excel, Google Sheets, Tableau, or Power BI. CSV is the universal import format for spreadsheets and databases, so converting first removes the friction between machine-readable JSON and human-readable rows and columns.

Use it whenever you need to read, sort, filter, or pivot JSON without writing code. Analysts paste an API payload to explore it in a pivot table; developers dump a query result to share with a non-technical colleague; teams stage scraped records before a bulk import into a relational database. The tool expects an array at the top level (a list of records); a single object is treated as one row. Because the structure is fixed at two dimensions, JSON to CSV is best for tabular, list-shaped data rather than deeply branching documents where a tree better fits the meaning.

Conversion works by scanning every object to build the full set of column headers, then writing one line per record with values placed under matching headers. Missing keys become empty cells, which keeps rows aligned. Nested objects are flattened into dotted columns, so {"address":{"city":"Tokyo"}} becomes a single column named address.city. Arrays of primitives such as tags are joined into one delimited cell, while arrays of objects (line items, transactions) may be expanded into extra columns. Any value containing a comma, double quote, or line break is wrapped in double quotes, and embedded quotes are doubled, following the RFC 4180 convention spreadsheets expect.

This converter runs entirely in your browser. Your JSON is parsed and serialized locally with no upload to a server, so confidential exports, customer records, or internal API data never leave your machine, which also makes large pastes fast. Accuracy note: CSV has no data types, so everything becomes text once written. Values like ZIP codes, phone numbers, and long IDs keep their digits in the file itself, but Excel may strip leading zeros or show big numbers in scientific notation when it auto-detects types on open. The fix is to import rather than double-click, and set those columns to Text.

Frequently asked questions

What JSON structure does the converter expect?

An array of objects, where each object is one record, for example [{"name":"Ada","age":36},{"name":"Linus","age":40}]. A single object is treated as one row. The union of all keys across the objects becomes the column headers, and records that are missing a key get an empty cell.

How are nested objects and arrays handled?

Nested objects are flattened into dotted column names, so a key like address.city is created from {"address":{"city":"Tokyo"}}. Arrays of simple values (such as tags) are joined into one delimited cell, since CSV is strictly two-dimensional and cannot represent a tree directly.

Why do my leading zeros or long numbers break in Excel?

The CSV file keeps the original characters, but Excel auto-detects types when you open the file, stripping leading zeros from ZIP and phone fields and switching numbers over 15 digits to scientific notation. Use Data > From Text/CSV and set those columns to Text format instead of double-clicking the file.

How are commas and quotes inside my values handled?

Any field that contains a comma, a double quote, or a line break is wrapped in double quotes, and any double quote inside the value is escaped by doubling it (""). This follows the RFC 4180 rules that spreadsheet and database importers expect, so your data stays in the correct columns.

Is my data uploaded anywhere?

No. The conversion happens entirely in your browser using local parsing, so your JSON is never sent to a server. That keeps private exports and API responses on your own machine and makes converting large inputs quick.

From our blog

How to Build CSS Gradients That Look Clean on Every Screen

By the Super Simple Digital Tools Team · Updated June 2026

Gradients are one of the few design effects in CSS that cost nothing to ship. Because the browser paints them as a generated image rather than downloading a file, a gradient background adds no extra HTTP request and stays razor-sharp at any resolution. That makes them perfect for hero sections, buttons, and overlays where a JPG or PNG would add weight and blur on high-density screens. The trade-off is syntax: the gradient functions pack direction, shape, and color stops into a single line, and that is exactly what a generator helps you assemble correctly.

Start with the workhorse, linear-gradient(). Its first value is the direction, either an angle such as 45deg or a keyword such as 'to right'. Remember that 0deg points straight up and the angle increases clockwise, so 90deg flows to the right. After the direction comes the color-stop list. At minimum you need two colors; the first sits at 0% and the last at 100% unless you say otherwise. Add a third or fourth color for richer blends, but three to four is usually the sweet spot before a gradient starts to look noisy.

Radial gradients swap the angle for a shape and size. radial-gradient(circle, ...) draws a perfect circle, while the default 'ellipse' stretches to match the box. Size keywords like closest-side and farthest-corner tell the browser where the final color lands relative to the element's edges, and the 'at' keyword repositions the center, for example 'at 30% 20%'. This is how you build a soft spotlight: a bright center color fading to a darker or transparent edge. Conic-gradient() rounds out the set by sweeping colors around a center point, which is what powers pie charts and color wheels.

Hard stops are the trick most people miss. If you give two adjacent colors the same position, for example 'red 50%, blue 50%', the blend collapses into a crisp line. Repeat that idea with repeating-linear-gradient() using fixed units like pixels and you get stripes; do it with repeating-conic-gradient() and you get pie slices or a starburst. Percentage stops will not repeat usefully because the gradient already spans the full element, so reach for px or em when you want a tiling pattern.

Finally, polish for real displays. Wide, low-contrast fades can show stair-step 'banding' on 8-bit monitors, so add an intermediate color stop or nudge the contrast to smooth it out. When a gradient fades to nothing, fade to the same color at zero alpha rather than the keyword 'transparent', which some engines interpret as transparent black and render as a gray haze. Test your final snippet against the actual background it sits on, because layered gradients stack with the first one on top.

  • Stick to three or four color stops; more than that tends to look noisy and muddy rather than smooth.
  • When fading to nothing, use rgba(r,g,b,0) instead of 'transparent' to avoid a gray banding seam.
  • Use fixed units (px or em), not percentages, with repeating-linear-gradient() so the pattern actually tiles.
  • Set two color stops to the same position to create a hard edge for stripes, checkerboards, or split backgrounds.

Read the full guide →

Tool by the Super Simple Digital Tools Team. Reviewed by our editorial team. Free to use, no signup required.

Related tools