Go to Sign up
Note: Your files never leave your device. We don't upload, transfer, or store your data.
|
|
|
|
|---|---|---|
|
|
|
The Markdown To JSONLines Converter on A.Tools transforms Markdown pipe-delimited tables into JSONLines (JSONL) format — one JSON object per line. All processing runs in your browser. No data leaves your device.
JSONLines is the standard format for data pipelines, log processing, LLM training datasets, BigQuery imports, and streaming APIs. Unlike regular JSON which wraps records in an array, JSONLines writes each record as a separate line — making it streamable, appendable, and resilient to partial reads.
Click Enter Data to paste a Markdown table into the input area, or click Choose File to drag and drop a .md file. Press Sample to load example data.
Once parsed, an interactive spreadsheet appears. Use the toolbar to:
Add or delete rows and columns
Transpose the table (swap rows and columns)
Remove duplicate rows
Delete empty rows and columns
Change text case (UPPERCASE, lowercase, Capitalize)
Find and replace values — supports case-sensitive search and regex
Toggle First Row as Header to define field names
Right-click any cell for context-menu operations.
In the Properties panel:
| Setting | Default | Description |
|---|---|---|
| Parse JSON | Off | Parse JSON strings in cells into actual JSON objects |
| Data Format | Object | Output each row as a JSON object or a JSON array |
Click Convert to generate JSONL output. Use Copy to Clipboard or Download File to save as a .jsonl file.
Two input modes: Paste Markdown directly or upload a .md file via drag-and-drop
Full table editor: Edit, transpose, deduplicate, find-and-replace before converting
Object and Array formats: JSON objects with named fields or flat JSON arrays
Smart JSON parsing: Automatically parse embedded JSON strings in cells into nested objects
Client-side processing: Files never leave the browser — zero data upload
Undo/Redo: Full edit history with revert support
Context menu: Right-click for quick row/column/cell operations
Header toggle: Treat the first row as field names or regular data
Validation indicator: Real-time feedback on input validity
Given this Markdown input:
| name | age | city |
|-------|-----|-------------|
| Alice | 30 | New York |
| Bob | 25 | Los Angeles |
Each row becomes a JSON object with keys from the header row:
{"name":"Alice","age":"30","city":"New York"}
{"name":"Bob","age":"25","city":"Los Angeles"}
Each row becomes a flat JSON array:
["Alice","30","New York"]
["Bob","25","Los Angeles"]
If a cell contains a valid JSON string like {"lat":40.7,"lng":-74.0}, it is parsed into a nested object rather than being treated as a plain string:
{"name":"Alice","age":"30","location":{"lat":40.7,"lng":-74.0}}
{"name":"Bob","age":"25","location":{"lat":34.0,"lng":-118.2}}
Without Parse JSON, the same cell would be output as an escaped string:
{"name":"Alice","age":"30","location":"{\"lat\":40.7,\"lng\":-74.0}"}JSONLines (also called JSONL, NDJSON, or Newline-Delimited JSON) is a format where each line is a valid JSON value. There is no wrapping array, no commas between records, and each line is independently parseable.
| Feature | JSON Array | JSONLines |
|---|---|---|
| Structure | [obj1, obj2, obj3] | obj1\nobj2\nobj3 |
| Streaming | Must read entire file | Read line by line |
| Appending | Rewrite entire array | Append new lines |
| Corruption | One error breaks all | Other lines unaffected |
| Memory | Load all into memory | Process one at a time |
| File extension | .json | .jsonl or .ndjson |
| MIME type | application/json | application/x-ndjson |
JSON arrays require loading the entire file to parse. With 1 million records, you must read all 1 million before processing the first one. JSONLines lets you read and process one record at a time — critical for:
Streaming pipelines: Kafka, AWS Kinesis, Google Pub/Sub
Big data: BigQuery, Snowflake, Databricks
LLM training: OpenAI fine-tuning, Hugging Face datasets
Log aggregation: Elasticsearch, Splunk, Datadog
Database imports: MongoDB mongoimport, PostgreSQL COPY
Official specification: jsonlines.org
When enabled, the tool inspects each cell value. If a cell contains a valid JSON string (object, array, number, boolean, or null), it is parsed into the corresponding JSON type in the output.
| Cell Value | Parse JSON Off | Parse JSON On |
|---|---|---|
42 | "42" (string) | 42 (number) |
true | "true" (string) | true (boolean) |
null | "null" (string) | null (null) |
{"a":1} | "{\"a\":1}" (escaped string) | {"a":1} (nested object) |
[1,2,3] | "[1,2,3]" (escaped string) | [1,2,3] (nested array) |
hello | "hello" (string) | "hello" (string) |
Use Parse JSON when your Markdown table contains embedded JSON objects, arrays, or typed values that should be preserved as structured data rather than flat strings.
Object — Each row becomes {"col1":"val1","col2":"val2"}. Requires "First Row as Header" to provide key names.
Array — Each row becomes ["val1","val2","val3"]. More compact but loses field names.
Use Object for structured data (recommended). Use Array for positional data or when headers are not available.
| Scenario | Why JSONLines |
|---|---|
| LLM fine-tuning | Convert example datasets into JSONL for OpenAI, Anthropic, or Hugging Face |
| BigQuery imports | Load data via bq load --source_format=NEWLINE_DELIMITED_JSON |
| Data pipelines | Stream records through Kafka, Kinesis, or Pub/Sub |
| MongoDB import | Use mongoimport --type json with JSONL files |
| Log processing | Convert structured data into NDJSON for Elasticsearch or Splunk |
| ETL workflows | Transform Markdown documentation into pipeline-ready data |
| Machine learning | Create training datasets in the standard JSONL format |
| API mock data | Generate NDJSON response files for testing |
| Database seeding | Populate NoSQL databases with JSONL records |
OpenAI fine-tuning requires JSONL with prompt and completion fields:
{"prompt":"What is the capital of France?","completion":" Paris"}
{"prompt":"What is 2+2?","completion":" 4"}
{"prompt":"Who wrote Hamlet?","completion":" William Shakespeare"}
bq load --source_format=NEWLINE_DELIMITED_JSON \
my_dataset.my_table data.jsonl
import json
with open("data.jsonl") as f:
for line in f:
record = json.loads(line)
print(record["name"], record["age"])
const fs = require("fs");
const readline = require("readline");
const rl = readline.createInterface({
input: fs.createReadStream("data.jsonl"),
});
rl.on("line", (line) => {
const record = JSON.parse(line);
console.log(record.name, record.age);
});
No. All file parsing and conversion runs in your browser using JavaScript. Your data stays on your device. A.Tools never receives, stores, or transmits your file contents.
The tool supports standard pipe-delimited Markdown tables following the CommonMark specification, including tables with or without leading/trailing pipes and alignment indicators.
JSONLines (JSONL / NDJSON) is a format where each line of a file is a valid JSON object. Unlike JSON arrays, each line is independently parseable — making it ideal for streaming, big data imports, and LLM training data.
Object format outputs {"field":"value"} with named keys from the header row. Array format outputs ["value1","value2"] without field names. Object format is recommended for most use cases.
When enabled, the tool detects JSON strings in cells and parses them into actual JSON types (numbers, booleans, null, nested objects, arrays). Without it, all values remain as strings.
Use .jsonl or .ndjson. Both are standard extensions for JSONLines format.
Yes. After parsing, the full table editor lets you modify cells, add or remove rows and columns, transpose, deduplicate, change text case, and find-and-replace values.
Processing is client-side, so the limit depends on your browser's memory. Tables with tens of thousands of rows work reliably on modern browsers.