JaySnake
Support
JaySnake is a native macOS app for reading JSON: a parser that accepts comments and trailing commas, a tree and a node-graph view, JSONPath queries, a split diff, and code generation for six targets. Everything runs on your Mac.
Need help? Write to me at [email protected]. I am the only developer, so your message comes straight to me.
Free on the Mac App Store · macOS 13 or later · Apple silicon and Intel · 2.2 MB
First things
I installed JaySnake, but the app calls itself JSON Parser. Is it the right app?
Yes. JaySnake is the name on the Mac App Store and on this site. Inside the app it presents itself as JSON Parser. It is one app under two names, and nothing else was installed.
If a search on your Mac for one name finds nothing, try the other.
How do I open a file, or send text from another app?
JaySnake registers with macOS as an editor for public.json, the system type for JSON files, so Open With… in Finder, a drag onto the Dock icon or a double-click opens the file in a new tab. You can also paste text straight into the editor.
A double-click only reaches JaySnake if it is the default app for JSON files on your Mac. To make it the default, select a JSON file in Finder, choose File → Get Info, pick the app under Open with, and click Change All.
There is also a macOS Services entry, Open in JaySnake. It takes the text you have selected in any app and opens it in a new tab. The Service is opt-in: if you do not see it, switch it on in System Settings, under Keyboard → Keyboard Shortcuts → Services. The text is handed over on your Mac and is not sent anywhere.
Parsing
Will it open JSON that is not strictly valid?
Usually. The parser tolerates // and /* */ comments, trailing commas, single-quoted strings and a leading byte-order mark — the things real config files are full of.
It stays strict about numbers, string escapes and raw control characters, so anything you export is valid JSON, whatever the input looked like. It also caps nesting at 512 levels.
It says my document cannot be parsed. What does the error tell me?
The line, the column and what the parser expected at that point, so start there.
Apart from ordinary slips such as a missing bracket, remember where the parser is strict on purpose: numbers, string escapes and raw control characters. It also caps nesting at 512 levels.
If you think the document should parse and it does not, send me the smallest fragment that reproduces the error, together with the message.
How large a document can it handle?
25 MB. The limit is enforced the same way whether the document arrives by Open, a Finder double-click, the Services entry or a paste.
Two caps keep the app responsive with big documents. The node graph draws at most 500 boxes. Very long string values are truncated on screen at 2,000 characters, but the full value is still searched and copied — a string that looks cut off is intact.
Working with a document
What does the JSONPath query support?
A subset of JSONPath: wildcards, recursive descent, negative indices, slices, unions and comparison filters, with a live count of matches — for example $.items[*].sku. As you type a key, it suggests the keys that exist at that position in your document.
In the tree, right-click any row to copy its value, its key or its full JSONPath.
It is a subset, not the whole specification. If a query you depend on does not work, send it to me with a small sample document.
Which languages can it generate code for?
Six targets from one inferred model: Swift Codable structs, TypeScript interfaces, Kotlin data classes, Java classes, Go structs with tags, and a JSON Schema (draft-07).
Array elements are merged into a single shape. A key missing from some elements becomes optional, an observed null becomes nullable, and mixed scalar types are widened rather than guessed at. If a generated type looks wrong, check the sample first: the model is inferred only from the document in front of it.
How do I compare two documents?
Open both as tabs and press ⌘⇧D (Command-Shift-D). You get a split diff between the current tab and any other open tab, with added and removed counts and green and red row tints.
Both sides are re-parsed and pretty-printed before a line diff aligns them, so whitespace and formatting differences do not show up. You are comparing structure.
What can I export, and does it change my data?
Pretty-printed JSON, minified JSON, YAML, CSV, or an escaped one-line string ready to embed. CSV is for an array of flat objects.
Objects keep the order they were written in and numbers keep their exact text, so a round trip does not quietly reformat the document. A repeated key raises a non-fatal warning instead of dropping one of the values. JSON allows duplicate keys but YAML and CSV do not, so in those exports duplicates are renamed, not dropped.
Your data and tips
Does it reopen what I was working on? Where is that kept?
Yes. Tabs autosave into the active session as you type and come back at the next launch. You can also save a whole set of tabs as a named session. Each tab keeps its own undo history.
The session is stored only on your Mac, inside the app's sandboxed Application Support folder, in a directory locked to 0700 with the file at 0600, so other users on the machine cannot read it. If the session file is ever unreadable, the app keeps the original alongside rather than overwriting it. Interface preferences sit in the standard macOS preferences store. All of this is removed when you delete the app and its data.
Does my JSON ever leave my Mac? Why is there a network entitlement?
No. Parsing, queries, diffing, type inference, code generation and conversion all run on your Mac. There is no analytics, no telemetry, no third-party SDK and no networking code in the app, and I have no servers.
If you inspect the app you will find one network entitlement. It exists solely so StoreKit can reach the App Store for the tip jar. What the app keeps on your Mac is listed in the privacy policy.
What do tips unlock?
Nothing. Every feature is free for everyone, and there are no ads. Tips are voluntary, and buying one changes nothing in the app except a thank-you message.
Tips are App Store purchases, so payment and refunds are handled by Apple. You can ask Apple for a refund at reportaproblem.apple.com.
Reporting a problem
If the app crashes or does something odd, first check the App Store for an update — that is where new versions arrive. Then write to me at [email protected] and include:
- the Mac model, and whether it is Apple silicon or Intel
- the macOS version
- the app version (in Finder, select the app and choose File → Get Info)
- what you did just before, and the exact error text if there was one
- if you can, the smallest piece of JSON that reproduces it — with anything private removed, because an email does leave your Mac
The app sends me no diagnostics of any kind, so your description is all I have to work with.