Go to Sign up
Note: Your files never leave your device. We don't upload, transfer, or store your data.
|
|
|
|
|---|---|---|
|
|
|
The Markdown To JSON Converter on A.Tools transforms Markdown pipe-delimited tables into structured JSON. Five configurable settings let you control the output format, indentation, structure, and whether the result is minified or pretty-printed. All processing runs in your browser — no data leaves your device.
JSON (JavaScript Object Notation) is the universal data interchange format used by APIs, databases, configuration files, and nearly every programming language. Converting Markdown tables to JSON makes your data immediately usable in web applications, data pipelines, and developer workflows.
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 |
|---|---|---|
| Data Format | Array of Objects | Choose from 4 output structure options |
| Indent Size | 2 | Number of spaces per indentation level |
| Root Object Name | (empty) | Wrap output in a named root object |
| Parse JSON | Off | Parse JSON strings in cells into actual JSON types |
| Minify Output | Off | Remove whitespace for compact output |
Click Convert to generate JSON output. Use Copy to Clipboard or Download File to save as a .json 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
Four data formats: Array of Objects, Array of Arrays, Object of Objects, and Keyed format
Root Object Name: Wrap the entire output in a named container for API compatibility
Indent control: Set indentation to 2, 4, or 8 spaces — or use tab characters
Smart JSON parsing: Parse embedded JSON strings in cells into nested objects
Minify output: Strip whitespace for production-ready compact JSON
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 |
[
{
"name": "Alice",
"age": "30",
"city": "New York"
},
{
"name": "Bob",
"age": "25",
"city": "Los Angeles"
}
]
[
["Alice", "30", "New York"],
["Bob", "25", "Los Angeles"]
]
{
"0": {
"name": "Alice",
"age": "30",
"city": "New York"
},
"1": {
"name": "Bob",
"age": "25",
"city": "Los Angeles"
}
}
Uses the first column value as the key for each row:
{
"Alice": {
"age": "30",
"city": "New York"
},
"Bob": {
"age": "25",
"city": "Los Angeles"
}
}
{
"users": [
{
"name": "Alice",
"age": "30",
"city": "New York"
},
{
"name": "Bob",
"age": "25",
"city": "Los Angeles"
}
]
}
[{"name":"Alice","age":"30","city":"New York"},{"name":"Bob","age":"25","city":"Los Angeles"}]If a cell contains {"lat":40.7,"lng":-74.0}, Parse JSON converts it into a nested object:
[
{
"name": "Alice",
"age": "30",
"location": {
"lat": 40.7,
"lng": -74.0
}
}
]
JSON (JavaScript Object Notation) is a lightweight, text-based format for storing and exchanging structured data. Defined in RFC 8259, it uses human-readable key-value pairs and arrays. Every major programming language supports JSON natively.
| Format | Structure | Best For |
|---|---|---|
| Array of Objects | [{"k":"v"}, ...] | APIs, general data, most common |
| Array of Arrays | [["v1","v2"], ...] | Positional data, no headers needed |
| Object of Objects | {"0":{"k":"v"}, ...} | Indexed access by row number |
| Keyed | {"id":{"k":"v"}, ...} | Lookup by unique key from first column |
Array of Objects — The default and most widely used format. Ideal for REST APIs, configuration files, and data interchange. Each record is self-describing with named fields.
Array of Arrays — More compact than objects since keys are omitted. Useful when column order is consistent and field names are unnecessary — for example, chart data, matrix operations, or positional parameters.
Object of Objects — Rows are keyed by their numeric index. Useful when you need to reference specific rows by position without scanning the array.
Keyed Format — Uses the first column's value as the key for each row. Ideal for lookup tables, dictionaries, configuration maps, and any dataset where the first column contains unique identifiers.
This tool produces standard JSON — all records wrapped in a single array or object. For streaming, BigQuery imports, or LLM training data, use Markdown To JSONLines instead, which outputs one JSON record per line.
Controls the top-level structure of the JSON output. Choose from:
Array of Objects — [{...}, {...}] — Each row is an object with named fields
Array of Arrays — [["...", "..."], ...] — Each row is a flat array of values
Object of Objects — {"0": {...}, "1": {...}} — Rows indexed by position
Keyed — {"uniqueKey": {...}, ...} — Rows keyed by first column value
Number of spaces per indentation level in the output. Options:
2 spaces (default) — Standard for most JavaScript projects
4 spaces — Common in Python and Java conventions
8 spaces — Legacy Linux kernel style
Tab — Use tab characters instead of spaces
Only applies when Minify Output is disabled.
When set, wraps the entire output in an object with this name as the key:
{
"rootObjectName": [
...your data...
]
}
Leave empty to output the raw array or object without a wrapper. Use this when an API or configuration format requires a specific top-level key.
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:
| 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) | {"a":1} (nested object) |
[1,2,3] | "[1,2,3]" (escaped) | [1,2,3] (nested array) |
hello | "hello" (string) | "hello" (string) |
Removes all whitespace, newlines, and indentation from the output. The result is a single-line JSON string — significantly smaller in file size. Use for production deployment, API responses, or storage. Disable during development for readability.
| Scenario | Recommended Format |
|---|---|
| REST API mock data | Array of Objects |
| Configuration files | Array of Objects or Keyed |
| Data import into MongoDB | Array of Objects |
| Chart visualization data | Array of Arrays |
| Lookup tables / dictionaries | Keyed |
| Application state seeding | Array of Objects with Root Object Name |
| Nested data with embedded JSON | Array of Objects with Parse JSON |
| Production deployment | Minify Output enabled |
| Python / pandas workflows | Array of Objects |
| Node.js / JavaScript projects | Array of Objects, indent 2 |
{
"users": [
{"id": 1, "name": "Alice", "role": "admin"},
{"id": 2, "name": "Bob", "role": "editor"}
]
}
Keyed format creates a clean config map:
{
"production": {"host": "api.example.com", "port": "443", "timeout": "30"},
"staging": {"host": "staging.example.com", "port": "8443", "timeout": "60"}
}
import json
with open("data.json") as f:
data = json.load(f)
for row in data:
print(row["name"], row["city"])
const data = await fetch("data.json").then(r => r.json());
data.forEach(row => {
console.log(row.name, row.city);
});
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.
Array of Objects outputs named fields ([{"name":"Alice"}]). Array of Arrays outputs positional values ([["Alice"]]). Object of Objects indexes rows by number ({"0":{...}}). Keyed uses the first column as a unique key ({"Alice":{...}}).
It wraps the output array or object inside a named container: {"yourName": [...]}. Leave empty for a raw array or object without a wrapper.
When enabled, the tool detects JSON strings inside cells and parses them into actual JSON types (numbers, booleans, null, nested objects, arrays). Without it, all cell values are treated as strings.
Enable Minify Output when generating JSON for production — APIs, file storage, or network transfer. It removes all whitespace, reducing file size. Disable it during development for readability.
Use .json for standard JSON output. If you need one-record-per-line format, use the Markdown To JSONLines tool instead, which outputs .jsonl files.
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.