Skip to tool

Categories

Never uploadedlocal-jsFree, no account

CSV to JSON — online, without uploading your files

This turns a comma-separated file into an array of JSON objects, one object per row, keyed by the header names in the first row. Values are carried through as text from parse to output — the page says so in its own footer, "Values remain strings by design" — so a postcode with a leading zero and a sixteen-digit account number come out with every character they went in with. The parser is strict rather than forgiving: every column needs a non-empty header, headers must be unique, and each row must carry exactly as many fields as there are headers, or the run stops and names the row. Fields are separated by commas only, so a semicolon-separated export reads as a single column and there is no setting to change the separator. The file picker accepts .csv up to 20 MB; the paste box has no character limit of its own, so a very large paste is bounded only by what the tab can hold.

Quick Summary / Direct Answer

Paste a CSV into the box, or choose a .csv file of up to 20 MB, then press Convert to JSON. The first row becomes the keys, every later row becomes one object, and the result is a JSON array printed with two-space indentation that you can copy or download as converted.json. Every value arrives as a JSON string, because nothing here is read as a number, a date or a boolean.

Tool Specifications

Runs on

Your browser

Server upload

None

Account

Not required

Cost

Free, no paywall

How to use CSV to JSON in 3 simple steps

Three steps, all of them inside this browser tab.

01

Open the CSV to JSON workbench

Open the workspace in your browser. The code it needs loads with the page — there is nothing to install and no account to create.

02

Provide your input files or parameters

Select, drag, or configure your input. The file is read into the page and processed there, so there is no upload to wait for.

03

Save your output

Preview the result and click download. The file is written from the page straight to your disk; nothing is stored on a server.

Local Browser Compute vs. Traditional Cloud Converters

What changes when the tool runs in your own tab instead of on someone else's server.

Feature / AspectOpenTools (Local)Standard Cloud Converters
Where your file goesStays in the page; it never touches a serverUploaded to and processed on the provider’s servers
Waiting to uploadNone — there is no upload stepUpload time, then a place in the server queue
PriceFree, with no paywall and no sign-upOften a free tier with daily limits or a subscription
RetentionNothing to retain; the file was never sentStored on the provider’s disks under their policy
Account & trackingNo account, no third-party trackers, no client-side analyticsOften an email sign-up and advertising trackers

How this page is locked down

This page is served with a Content Security Policy that blocks every network connection the page could make (connect-src 'none'). Your browser will not send the file, its name or its contents to any server, including this one. The exact header is below.

TRADITIONAL CLOUD CONVERTERS (SERVER-SIDE) Your Device Raw Document Internet Upload Cloud Server Disk Stored & Queued Cloud Download Download Output Provider keeps a copy OPENTOOLS: THE WORK HAPPENS IN THE PAGE Your Browser Tab File read into the page No upload JavaScript (V8/JSC) connect-src 'none' Save Local Disk Your own disk
Content-Security-Policy: default-src 'self'; base-uri 'self'; connect-src 'none'; font-src 'self'; form-action 'none'; frame-ancestors 'none'; img-src 'self' blob: data:; object-src 'none'; script-src 'self' 'unsafe-inline'; style-src 'self' 'unsafe-inline'; webrtc 'block'; worker-src 'self' blob:

Related Spreadsheet and Data Utilities

Other Spreadsheet and Data tools that run the same way.

View all 39 tools →

Frequently Asked Questions

Does it convert numbers, dates and true or false values?

No, and that is the point. Every cell becomes a JSON string, so 007 stays 007, a long account or order number keeps all of its digits, and a value such as 1-2 is not turned into a date. Type coercion is where a CSV quietly loses information, because a value that is too long to be held exactly as a number comes back changed; the JSON tools in the same file refuse an integer outside the exact range rather than round it, which is the same hazard seen from the other side. Cast the values yourself afterwards, column by column, where you can see what you are deciding.

How does it handle quotes, commas and line breaks inside a field?

It follows the usual CSV quoting rules. A field that begins with a double quote is read as quoted and may hold commas and line breaks, and two double quotes inside it mean one literal double quote. A double quote that appears after other characters in the same field is kept as an ordinary character rather than opening a quoted section. An opening quote that is never closed stops the run with "CSV contains an unclosed quoted field." A test in this repository parses a file with a quoted comma, a doubled quote and a line break inside a field, and requires all three back intact.

Why was my file refused?

Three named checks reject a file. An empty cell anywhere in the first row gives "Every CSV column needs a header in the first row.", which usually means the export began with a title line or a blank column. Two identical headers give "CSV headers must be unique before conversion.", because a duplicate key would silently overwrite a column. A row with the wrong number of fields gives its row number and both counts, for example "Row 2 has 1 columns; expected 2." Nothing is padded or discarded to make a ragged file fit.

What happens to blank lines and to a byte-order mark?

A byte-order mark at the very start of the file is removed before parsing, and blank lines at the end of the file are dropped. A blank line in the middle is not: in a file with more than one column it counts as a row holding one empty field, and it is refused with the row number like any other short row. Delete the stray line and run it again.

What are the limits, and what does the download contain?

The file picker accepts .csv or text/csv and stops at 20 MB with "This candidate limits CSV files to 20 MB." The download button writes the JSON you see to a file named converted.json as UTF-8 JSON, and the result panel reports how many rows and columns were converted. The file is written from the page to your own disk; nothing is posted anywhere.

Does CSV to JSON upload my files or data to any server?

No. The work happens in the page you have open. This page is served with a Content Security Policy of connect-src 'none' and webrtc 'block', so the browser will not let it open a connection to any server, including this one.

Is CSV to JSON free?

Yes. There is no paywall, no usage limit and no account. If the tool is useful to you, you can choose to support the project.

Can I use this for confidential legal or financial records?

Your file is not sent anywhere, so it is not exposed to this site or to a third party. What remains is your own device and browser — treat it the way your organisation's policy treats any local file.

Does the site collect anything when I visit?

The server records one coarse metadata event per page visit (see the security policy for exactly what). There are no third-party trackers and no client-side analytics, and nothing from the tool itself — your files, inputs or results — is included.

Ready to use CSV to JSON?

Open the workspace in your browser. No account, no paywall, and your file never leaves the page.