From raw JSON to CSV, Excel, or Markdown. Covers data types, nested JSON, JSON Path, NDJSON, export formats, and troubleshooting.
Data types and syntax rules.
Format comparison guide.
API, NDJSON, databases.
Three flattening modes.
Locate the right data.
CSV vs Excel vs Markdown.
Keys, menus, columns.
Common errors and fixes.
JSON (JavaScript Object Notation) is a lightweight text format for storing and exchanging data.
[
{ "name": "Alice", "age": 30, "active": true },
{ "name": "Bob", "age": 25, "active": false }
]
| Type | Example | Notes |
|---|---|---|
| String | "hello" | Double quotes required. No single quotes. |
| Number | 42, 3.14, -7 | Integers and decimals. No quotes. |
| Boolean | true, false | Lowercase. No quotes. |
| Null | null | Represents "no value". Lowercase. |
| Array | [1, "a", null] | Ordered list. Items can be any type. |
| Object | {"key": "value"} | Key-value pairs. Keys are strings. |
"hello" is valid, 'hello' is not.{...}[...]{"a":1,} is invalid."2026-06-03" (ISO 8601)."\u4e2d" = "中"JSON sits in a unique position among data formats. Here's how it compares:
| Feature | JSON | CSV | XML | YAML |
|---|---|---|---|---|
| Nesting | Yes | No | Yes | Yes |
| Readability | Good | Best | Verbose | Excellent |
| File size | Medium | Smallest | Largest | Small |
| Data types | 5 types | Text only | Text only | 6+ types |
| Web APIs | Standard | Rare | Legacy | Growing |
| Spreadsheets | Need convert | Direct | Need parse | Need parse |
When to use JSON: API responses, config files, log data, or when you need nested structures. Convert to CSV for Excel; convert to Markdown for docs. Need to convert YAML? Try YAML to JSON.
Most APIs wrap their data in an outer object with metadata:
{
"status": "ok",
"count": 2,
"data": {
"users": [
{ "id": 1, "name": "Alice", "email": "alice@example.com" },
{ "id": 2, "name": "Bob", "email": "bob@example.com" }
]
}
}
How to handle: JSON Path = data.users
Common API wrapping patterns:
Need to extract nested data from an API response? Use the JSON Path feature in the tool.
| API Source | Pattern | JSON Path |
|---|---|---|
| GitHub API | {"data":{"nodes":[...]}} | data.nodes |
| REST API | {"results":[...]} | results |
| Paginated API | {"data":{"list":[...],"total":100}} | data.list |
| GraphQL | {"data":{"users":[...]}} | data.users |
One JSON object per line. Common in logs and streaming data:
{"ts":"2026-06-03T10:00:00Z","level":"info","msg":"Server started"}
{"ts":"2026-06-03T10:00:01Z","level":"warn","msg":"Memory at 85%"}
{"ts":"2026-06-03T10:00:02Z","level":"error","msg":"Connection refused"}
JSONXX auto-detects NDJSON. Each line becomes a row. Blank lines are ignored.
Common sources: Docker logs, Kafka messages, database exports, Elasticsearch bulk API.
Tip: If your data is in YAML format instead, convert YAML to JSON first, then follow this guide.
{
"orderId": 1001,
"customer": { "name": "Alice", "tier": "gold" },
"items": [
{ "sku": "A1", "name": "Widget", "qty": 2, "price": 9.99 },
{ "sku": "B2", "name": "Gadget", "qty": 1, "price": 24.50 }
]
}
Use dot-separated mode to flatten customer.name and customer.tier into separate columns. Try it in the JSON to CSV tool.
| Format | Example | How JSONXX Handles It |
|---|---|---|
| Array (standard) | [{...}, {...}] | Converts directly to table |
| Single object | {"name":"Alice"} | Wraps as 1 row automatically |
| API wrapped | {"data":[{...}]} | Use JSON Path to extract |
| NDJSON | {...}\n{...} | Auto-detects line-by-line |
When JSON has objects inside objects, you need to flatten them into a flat table. JSONXX offers three modes.
Input:
[
{ "name": "Alice", "address": { "city": "Beijing", "district": "Haidian" } },
{ "name": "Bob", "address": { "city": "Shanghai", "district": "Pudong" } }
]
| name | address.city | address.district |
|---|---|---|
| Alice | Beijing | Haidian |
| Bob | Shanghai | Pudong |
Best for: flat tables, data analysis, CSV export.
| name | address |
|---|---|
| Alice | {"city":"Beijing","district":"Haidian"} |
| Bob | {"city":"Shanghai","district":"Pudong"} |
Best for: preserving nested structure in a single cell.
| name | city | district |
|---|---|---|
| Alice | Beijing | Haidian |
| Bob | Shanghai | Pudong |
Best for: when only the first nesting level matters.
Dot-separated flattens to the deepest level automatically:
{ "user": { "profile": { "address": { "city": "Beijing" } } } }
Result column: user.profile.address.city
JSON Path tells the tool exactly where your data is. Leave it empty for auto-detect. Live demo: try the JSON to CSV tool and enter paths like data.users to extract specific arrays.
| Scenario | JSON Path |
|---|---|
| Root-level array | (leave empty) |
| {"data": [...]} | data |
| {"data": {"items": [...]}} | data.items |
| {"result": {"records": [...]}} | result.records |
| Nested API (3 levels) | response.data.users |
# Dot notation (recommended) data.items # Bracket notation (for special characters) ['data']['user-list'] ['results'][0]['items'] # Mixed notation data['user-list'].items
| Situation | Need Path? |
|---|---|
| JSON is a root-level array [...] | No |
| JSON is a single object {...} | No |
| JSON is API-wrapped {"data":[...]} | Yes |
| Auto-detect picked the wrong array | Yes |
| Multiple arrays, need a specific one | Yes |
Best for: importing into any tool, databases, R/Python scripts. Try it now →
Best for: Microsoft Excel, Google Sheets, Apple Numbers. Try it now →
Best for: GitHub README, Notion docs, technical documentation. Try it now →
Best for: quick paste into Excel (Ctrl+V). Tab-separated, no file download. Try it now →
| Your Need | Recommended |
|---|---|
| Not sure | CSV (most universal) |
| Excel user | .xlsx (no encoding risk) |
| GitHub docs | Markdown |
| Quick paste to Excel | Copy TSV |
| Database import | CSV (UTF-8) |
| Chinese data | CSV UTF-8 BOM or .xlsx |
Tip: Not sure? Start with CSV — it's the most universally supported. For Excel users, choose .xlsx to avoid encoding issues.
The table is fully editable — not just a preview. Fix values before exporting.
| Shortcut | Action |
|---|---|
| Double-click | Edit cell |
| Tab | Confirm edit, move right |
| Enter | Confirm edit, move down |
| Escape | Cancel edit |
| Ctrl+Z / Cmd+Z | Undo (up to 50 steps) |
| Ctrl+Y / Cmd+Y | Redo |
| Delete | Clear selected cell |
Add a blank row before the current one.
Add a blank row after the current one.
Remove the current row from the table.
Set cell value to null.
| Operation | How |
|---|---|
| Sort | Click column header to toggle asc/desc |
| Hide column | Right-click header → Hide Column |
| Unhide columns | Right-click any header → Unhide Columns |
| Traditional Tools | JSONXX |
|---|---|
| Paste → Export → Download | Paste → See table → Edit → Export |
| Discover errors after export | Fix before exporting |
| Can't modify data | Double-click any cell to edit |
Cause: JSON syntax error.
Fix: Check the left panel — the tool highlights the exact line and character in red. Or paste your JSON into the JSON Editor to validate it first.
Common errors: trailing comma {"a":1,}, single quotes 'hello', missing quotes {name:"Alice"}
Cause: Auto-detect picked the wrong array. Fix: Use JSON Path to point at the right one (see Chapter 5).
Cause: Excel defaults to ANSI encoding for CSV. Fix: Choose UTF-8 BOM encoding, or download .xlsx format directly.
Limit: Small files only (free tier). Fix: Upgrade to JSONXX Pro to remove the file-size limit, or split the file into smaller chunks. For a quick data preview of large files, try the JSON Viewer.
Cause: Format doesn't match NDJSON standard. Each line must be a valid JSON object. Blank lines are OK.
Normal behavior. Different objects may have different keys. The tool shows all columns; missing values display as null (gray -).
JSON (JavaScript Object Notation) is a lightweight data format using key:value pairs and arrays. It is the standard format for web APIs, config files, and data exports.
Use dot-separated mode to flatten nested objects (e.g., address.city). Switch to JSON string mode to preserve structure, or 1-level mode for shallow flattening.
Yes. Double-click cells to edit, Tab/Enter to navigate, Ctrl+Z to undo. All edits are included in the final export.
No. All processing happens in your browser. Your data never leaves your device.
NDJSON (JSON Lines) is one JSON object per line. JSONXX auto-detects it and treats each line as a row.
Maximum 100 KB per file in the free tier. For larger files, upgrade to JSONXX Pro for unlimited processing.
Choose UTF-8 BOM encoding when exporting CSV, or download as .xlsx format directly. Both options avoid Excel's ANSI encoding issue.
CSV is a plain text file with configurable delimiters — universal and smallest in size. TSV copies tab-separated data directly to your clipboard for quick Excel paste. Excel (.xlsx) preserves data types (numbers stay numbers) and supports multi-sheet workbooks. Markdown (.md) is best for documentation and GitHub-ready tables.
JSONXX's free tier is intended for small files — all processing happens in your browser, so no data is uploaded. For larger datasets, upgrade to JSONXX Pro or consider splitting the file using command-line tools like split (Unix/Linux/macOS) or preview the data structure in the JSON Viewer first to plan your split.
JSONXX handles JSON natively. For YAML, use the YAML to JSON tool first to convert YAML to JSON, then follow this tutorial to export to CSV. XML would need a dedicated converter first.