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.
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:
| 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.
{
"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.
| 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.
| 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.
Best for: Microsoft Excel, Google Sheets, Apple Numbers.
Best for: GitHub README, Notion docs, technical documentation.
Best for: quick paste into Excel (Ctrl+V). Tab-separated, no file download.
| 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.
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.
Limit: 2MB / 2,000 rows. Fix: Split the file into smaller chunks. Pro version coming soon.
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 2MB or 2,000 rows. For larger files, split into chunks. Pro version coming soon.
Choose UTF-8 BOM encoding when exporting CSV, or download as .xlsx format directly.