JSON Lines (JSONL / NDJSON) Converter
Check, browse and convert JSON Lines files of any size, right in your browser.
Try before you buy.
- Free preview: every check, count and error with its line, your records one by one, and the first rows of the converted table and the field statistics (up to 10).
- Locked until you unlock it: download and copy.
- Unlock: Pro pass, ₹179 for 30 days, a one-time payment that never renews.
Ways to unlock shows how to get the full result.
Printing this result is locked in the free preview.
Your data
Paste one JSON value per line, a JSON array, pretty-printed records or CSV. For large files use Open a file: any size works there.
Check
Errors
Records
Fields
| Field | In records | Types | Distinct | Range or length | Examples |
|---|
Convert
A table becomes JSON Lines or a JSON array here; to turn it into another table format, use the Spreadsheet Format Converter.
Columns
The result
Locked in the free preview. Opens the ways to unlock this result.
Locked in the free preview. Batch runs unlock with a pass.
Locked in the free preview. Query results unlock with a pass.
About the JSON Lines (JSONL / NDJSON) Converter
JSON Lines — also called JSONL or NDJSON — keeps one JSON value on each line: the format of log files, data exports, streaming APIs and machine-learning datasets. This tool reads such files of any size in your browser (gzip-compressed ones too), checks every line, and converts them: JSONL to a JSON array, a JSON array back to JSONL, JSONL to CSV, TSV or Excel, and CSV or Excel tables to JSONL.
Every error is reported with its exact line and column and the text around it (“Line 3, column 46: Trailing comma is not allowed before '}'”), so a broken export can be fixed instead of guessed at. The record browser shows any record indented, and the field list counts how often each field occurs, its types, distinct values and ranges. Files with a known layout get their own checks: chat fine-tuning files (a messages list of system, user and assistant turns on each line), prompt and completion pairs, instruction datasets and JSON logs (levels, time range, records out of order).
Without a pass, the free preview shows every check and error, your records, and the first rows of the converted table and the field list; the converted files and copying unlock with a Pro pass.
How to use it
- Paste your data, or choose Open a file and pick a .jsonl, .ndjson, .json, .gz, .csv or Excel file. Try an example loads a small log file with one broken line.
- The format is detected (JSON Lines, a JSON array, pretty-printed JSON, RFC 7464 sequences or a table); change Read as if it guesses wrong, and choose whether blank lines are skipped or reported.
- Read the check: the record and error counts, each error with its line and column, and the layout checks. Use the record browser and the field list to look inside the data.
- Under Convert, choose JSON Lines, a JSON array, CSV, TSV or Excel and its options. The table shows the first rows; with a pass, or after unlocking this result, press Download (optionally gzip-compressed) or Copy.
Examples
{"id": 1, "user": {"name": "Asha"}, "tags": ["new"]}
{"id": 2, "user": {"name": "Ravi"}, "tags": []}id,user.name,tags 1,Asha,"[""new""]" 2,Ravi,[]
Nested objects become dot-named columns; lists stay JSON text in one cell (or a column per item, or values joined with “; ”).
{"ts": "2026-03-01T10:00:00Z", "msg": "start"}
{"ts": "2026-03-01T10:00:01Z", "msg": "slow"}
{"ts": "2026-03-01T10:00:02Z", "msg": "done",}Line 3, column 46: Trailing comma is not allowed before '}'
The record browser opens the line with a caret under the column, and the other records still convert.
[{"id": 1}, {"id": 2}]{"id":1}
{"id":2}Common uses
- Opening a JSONL export or log file that is too large for a text editor.
- Checking a fine-tuning or evaluation dataset before uploading it: every example parses, every message has a role and content, every example ends with an assistant reply.
- Turning API output or logs into a CSV or Excel sheet for a colleague.
- Turning a spreadsheet into JSON Lines for a database import, a search index or a batch job.
- Finding the one broken line that makes an import fail.
What counts as valid JSON Lines
Each line must be one complete JSON value encoded as UTF-8, and lines end with \n (a \r\n line end works too, because whitespace around a value is ignored) — see jsonlines.org. A byte-order mark is not allowed; one at the start of a file is reported and ignored. JSON Lines does not allow blank lines; NDJSON lets a reader skip them if it says so, which is why Blank lines is a setting here. Values are checked against RFC 8259, so a trailing comma, single quotes or NaN are errors.
Other ways records come
- A JSON array of records, also one that fills a whole file: it is read item by item, so its size does not matter.
- Concatenated or pretty-printed JSON: records one after another, each over several lines.
- JSON text sequences (RFC 7464): each record after an ASCII record-separator character (0x1E).
- gzip: .jsonl.gz and .ndjson.gz files are unpacked in the browser first (up to 512 MB unpacked).
- CSV, TSV and Excel tables: each row becomes one object, with numbers and true/false typed (codes such as 007 stay text) and optional nested objects from dotted column names such as
address.city.
Numbers stay exactly as written
Most JSON tools read numbers as floating point, which silently changes whole numbers longer than 15–16 digits — order IDs, account numbers, snowflake IDs — decimals with more than 15 significant digits, and numbers too large for a double (1e400). Here every number is kept as written: JSON and JSON Lines output is made from each record’s own text (only the spaces between values change), CSV and TSV get each number exactly as the record has it (10.50 stays 10.50, 1E5 stays 1E5), and Excel gets numbers of more than 15 digits as text, because Excel keeps only 15 significant digits.
Limitations
- JSON Lines files of any size can be checked and converted; a file is read in pieces and never held whole. Gzip files are unpacked into memory first (up to 512 MB unpacked), as are tables turned into JSON (up to 512 MB of JSON).
- Excel files hold at most 1,048,576 rows and 16,384 columns, and a cell at most 32,767 characters: longer results are cut and the page says so. Choose CSV for more.
- If a record has the same key twice, the last value is used, as most JSON readers do.
- The checks of fine-tuning files follow the common chat layout (a
messageslist withroleandcontent); they do not count tokens.
Privacy
Everything happens in your browser. What you enter or open here is not uploaded or stored by MySmartCoPilot.
Frequently asked questions
What do I get without a pass?
Without a pass, JSON Lines (JSONL / NDJSON) Converter shows every check, count and error with its line, your records one by one, and the first rows of the converted table and the field statistics (up to 10). Until you unlock it, the result can’t be downloaded or copied. A Pro, Premium or Ultimate pass, a one-time payment that never renews, unlocks the full result. The pricing page lists the passes and their prices.
How do I convert JSONL to a JSON array?
Paste or open the file, choose JSON array under Convert, and with a pass press Download. Each record keeps its exact text; Indent every record writes the array fully indented instead of one record per line.
What is the difference between JSONL and NDJSON?
Almost none: both put one JSON value on each line, in UTF-8, separated by \n. The JSON Lines description says a blank line is not a value; the NDJSON specification allows a reader to skip blank lines if it documents that. NDJSON files usually end in .ndjson and JSON Lines files in .jsonl.
How do I find the broken line in a large JSONL file?
Open the file here: every line that is not valid JSON is listed with its line number, column and the text around the error. Show opens it in the record browser. The other lines are still counted and converted.
Can it check a fine-tuning dataset?
Yes. When most lines hold a messages list, every example is checked: each message is an object with a known role (system, user, assistant, tool or developer) and text content, no example is empty, and each has an assistant reply. The check also counts messages per example and characters of text.
How are nested objects and lists written to CSV?
Nested objects become columns named with dots (user.address.city). Lists are written as JSON text in one cell by default; you can join lists of plain values with “; ” instead, or give each item its own column (tags[0], tags[1] …).
Is my file uploaded?
No. The file is read, checked and converted by this page on your device.