A JSON workbench for Raycast. Open JSON from your clipboard, browse one level at a time, and copy exactly the content you need.
Return to enter it. Escape returns to the previous level and preserves your selection. Raycast clears an active search before going back.id are distinguishable.An unfinished draft takes precedence over the clipboard when reopening the command. Empty or ordinary non-JSON clipboard text opens a clean input form. Malformed JSON-like clipboard text is kept in the form for correction.
Cmd+Return.error message, with line and column information when available. Raycast controls the label and error placement; the extension API does not expose a top-label or below-input-error option. The original input is retained.Copy Current Content produces valid formatted JSON, including quotes around strings. Copy Compact JSON provides the frequent compact-output action directly.
Open Copy As… for Serialize JSON (JSON.stringify), a string's plain text without quotes, its path, the compact entire document, or the exact original input. Paste Current Content to Previous App remains available as an explicitly named action.
Nested objects, arrays, and repeatedly escaped JSON strings are automatically deserialized until no further JSON layer can be decoded. There is no configured nesting-depth limit; traversal is iterative instead of using the JavaScript call stack. Ordinary strings, numeric/boolean text such as "123" and "true", and malformed nested JSON strings remain unchanged. Decoding is independent of the 3,000-node search index limit.
Serialize JSON (JSON.stringify) applies one JSON.stringify operation to the current decoded value, producing the same compact JSON as Copy Compact JSON. It does not stringify each child independently or add a second wrapper around the serialized document. For example, { "data": "{\"ok\":true}" } is decoded to { "data": { "ok": true } } and serialized as {"data":{"ok":true}}. An iterative fallback preserves these output semantics for JSON trees deeper than the native stringifier's call stack.
Restore Original Data Types switches to the original data. Deserialize All Nested JSON re-enables full decoding. Edit Input and Copy As… → Original Input retain the exact source throughout.
The extension uses a custom 512×512 PNG icon with transparent margins. See icon design and generation prompt.
Supported inputs include objects, arrays, primitive JSON values, single-quoted JSON copied from logs, and nested JSON strings such as:
{ "data": "{\"name\":\"Raycast\",\"items\":[1,2,3]}" }
| Shortcut | Action |
|---|---|
Return | Enter the selected container, or copy the current scope/value |
Cmd+Return in the form | View JSON |
Cmd+C in the browser | Copy current content as formatted JSON |
Cmd+Shift+C in the browser | Copy current content as compact JSON |
Cmd+Option+C when a field is selected | Copy the entire document |
Cmd+Shift+V | Read Clipboard in either view |
Cmd+E | Edit Input / resume draft |
Cmd+N | New Input |
Cmd+Shift+Backspace in the form | Clear Input and saved draft |
Cmd+K | Open Actions |
Escape | Dismiss the action menu, clear active search, or return to the previous level |
Less frequent format and view shortcuts are available inside Copy As… and View Options after opening those submenus. Type filtering is also available from the top-right dropdown.
Requires Raycast 2.2 or later and Node.js 22.22.2 or later.
# Install dependencies
npm install
# Run in development mode
npm run dev
# Rebuild the locally installed extension without a watcher
npm run build
# Run parsing, navigation, draft-priority, and search regression tests
npm test
# Lint code (optional, explicit command)
npm run lint
Local development extensions are not updated from the Store. If Better JSON reports incompatibility or Missing executable. You might need to build the extension., open Raycast v2 and rebuild from this project:
npm ci
npm run dev
After the build succeeds, open Better JSON in Raycast. You can stop the development watcher with Ctrl+C; the built extension remains installed. Use npm run build to rebuild it later without starting a watcher.
See the Raycast extension manual for local extension development and updates.
npm run build
npm run lint
npm run publish
MIT
XiaoDaiGua-Ray