Json-Pi

Parse, convert, visualize and understand JSON — locally in your browser.
Drop a .json, .txt or .pdf file, or click to browse
PDFs are scanned — all embedded JSON documents are detected and listed
Input
Output
Parsed output will appear here.
Field types
Parse some content to see each field's inferred type.
Drop a .csv, .tsv, .xlsx or .xls file, or click to browse
Workbooks with multiple sheets are supported — you'll choose which sheet to load
Input (CSV / TSV / pasted table)
Output (JSON)
Generated output will appear here.
Field types
Convert some data to see each field's inferred type.
JSON Input
Structure breakdown — click any key to locate it in the input
Each key, its type, and example values will be listed here.
Query result
Type a query in the bar above to see live results here.
Try: .customer.profile or .employees[*].name
JSON
Input (JSON)
Output (YAML)
Converted result will appear here.
Input JSON data
Generated schema
Generated JSON Schema, validation results, or mock data will appear here.
Original (left)
Modified (right)
Paste two documents above and click Compare to see the differences.

Playground

Each feature below has a "Try it" button that loads a sample into the relevant tab so you can see exactly how it works. Pick the format you want using the dropdown in the header, then come back here to try the examples.

The first tab takes raw text and parses it. Auto-fix repairs common mistakes — missing commas, single quotes, trailing commas, unquoted keys, smart quotes, tabs in YAML, BOM, and more. Once parsed you can view the data as an interactive tree, a table, formatted, or raw — and download in any format (JSON, CSV, XLSX, HTML, PDF, TXT).

Paste or upload a CSV, TSV, or Excel file. Smart auto-detect picks the right shape — array of objects, single object, keyed, columns, or nested (using dot-notation headers like customer.profile.name). Cells containing JSON strings are auto-expanded into real nested arrays/objects. Multi-sheet Excel workbooks let you pick which sheet to load.

Paste a document and get a key-by-key breakdown showing each field's type, length, and example values. Click any key in the breakdown to jump to its location in the source text. Use the Find bar to find keys instantly across deeply nested structures — partial matches, paths, and non-contiguous parts all work. Use the Query bar to extract specific values with JSONPath syntax.

The Convert tab takes your input in the active format and produces it in another. Auto-fix runs on the input so even messy data converts cleanly. The "Use output as input" button chains conversions — convert JSON to YAML, then immediately convert the YAML back, for example.

Drop a PDF containing one or more JSON blocks. Every embedded JSON (objects and arrays, even those spanning multiple pages) is detected automatically. When 2+ are found, a document dropdown appears so you can switch between them. Labels come from headings above each block or from identifying fields like name / id / transaction_id.

PDF upload uses the file picker on the first tab — drop a real PDF there to try this feature.

In the Explain tab, the Find bar finds keys instantly. Type partial names like email, full paths like customer.profile.contacts, or non-contiguous parts like items sku. Press Enter to jump between matches; Esc to clear. The Query bar accepts JSONPath syntax — try .employees[*].name to get all employee names at once.

The Schema tab gives you three tools in one. Generate infers a Draft-07 JSON Schema from sample data — useful when you want to document an API response or validate future inputs. Validate checks a document against a schema and lists every error with its path. Mock produces 1, 10, 100, or 1000 realistic fake records matching a schema — great for seeding databases or testing UIs.

The Diff tab does a deep structural comparison. Paste your "before" and "after" documents and click Compare — every added, removed, and changed path is highlighted. Switch between Side-by-side, Unified, and Changed paths only views. Toggle Ignore array order when you care that items exist, not their position.

Tips

  • Format selector in the header switches the whole app between JSON and YAML. XML is under construction.
  • Everything runs locally — no data is sent anywhere.
  • Drag-and-drop works on every file input across all tabs.
  • Click any key in the Explain breakdown to locate it in the input — the textarea scrolls to the position and highlights it.

Developer API

REST endpoints for parsing, converting, and analyzing JSON/YAML documents. Use them from any language that can make HTTPS requests.

API is live — base URL above
Base URL
https://json-pi.com/api
Auth
none (public, rate-limited)
Request format
application/json
Response format
application/json

⚙ Developer Settings

These toggles affect this browser only. Settings persist via localStorage. Other users see defaults unless they enter the code too.

Appearance

Tabs

Features

Interface

About this panel

All changes save automatically. Settings are stored in localStorage under the key jsonpi.devSettings and apply only to this browser. Anyone else visiting the site sees defaults.

For real site-wide control (settings that affect every visitor), a backend with a database would be required.

⚠ The developer code is enforced client-side only. Anyone with browser DevTools can bypass this gate. Treat it as a convenience gate, not a security boundary.

API access

A future API layer will appear here. (Not built yet — placeholder.)

GET /api/parse · POST /api/convert · POST /api/explain
Status: not yet available

📬 Contact History

All contact form submissions, newest first. Requires an admin token to fetch from the database.

Admin authentication

To view contact submissions, paste the admin token. This token is stored as a Netlify environment variable and is checked server-side.