Skip to content
Join

JSON Stringify and Unstringify

Escape JSON into a string, or peel every layer of escaping off a log payload. Handles double and triple escaping.

on-device escaped -> json free · no account

JSON Stringify and Unstringify ESCAPED ↔ JSON

Paste an escaped payload from a log and get readable JSON back — every layer of it. Or go the other way and escape JSON into a string value. All in your browser.

Direction
Options
Minify this
What was wrapped around your JSON

Copied
Processed in your browser — tokens and payloads are never uploaded. Ctrl+Enter

processed in your browser · never uploaded

How to use it

JSON Stringify and Unstringify
in three moves.

01

Paste the escaped string

Straight from your log or console. The surrounding quotes are optional - paste it with or without them.

02

Press Convert

Or Ctrl and Enter. The direction is detected: escaped input gets unescaped, plain JSON gets escaped. Override it with the Auto, Unescape and Escape buttons.

03

Check how deep it went

The chain above the result shows every layer that was removed, and whether what came out is valid JSON or plain text.

04

Copy, download, or send it on

Copy the result, save it, or use Minify this to carry it over to the JSON Minifier.

Formats & limits

What goes in, what comes out.

Format field guide
Input Output Typical saving Best for
Escaped string from a log Readable JSON Removes every layer at once Debugging webhooks and queue payloads
Escaped fragment, no outer quotes Readable JSON Accepted, not rejected Copy-paste straight from a console
JSON document Single JSON string value Adds bytes - that is the point Storing JSON inside a JSON field
Why this one

Built against the ways these tools disappoint.

We ran the same files through the popular alternatives first. These are the gaps we found, and what this tool does instead.

01

Unescape exactly one layer, so a double or triple escaped payload comes back still escaped and you have to keep pressing the button.

Peel every layer in one pass and show the chain, so you can see how deep the escaping went.

test: Paste the Sample. It is escaped twice - our result is readable JSON and the chain shows two layers.
02

Reject an escaped fragment that has lost its surrounding quotes, which is exactly what copying out of a log gives you.

Put the quotes back and parse it anyway.

test: Paste {\"id\":1} with no quotes around it. Most tools return an error; this returns {"id":1}.
03

Report a failure when the unescaped content is not JSON, as though the unescaping itself had failed.

Say plainly that the escaping was removed correctly and what was inside was plain text, or JSON that was broken before it was escaped.

test: Escape a plain sentence, then unescape it. The sentence comes back and the result is labelled plain text, not an error.
The detail

How this actually works.

JSON stringify turns a JSON document into a single string value that can be stored in a field, sent as a message body or written to a log. Unstringify does the reverse. The tool does both, and works out which direction you want from what you paste.

Escaping is what makes the round trip possible. A JSON string cannot contain a raw double quote, so every " becomes \", every backslash becomes \\, and every line break becomes \n. The result is valid JSON, and unreadable to a human.

The layer problem

This is the part that wastes an afternoon.

Escaping is not idempotent. Each time a payload passes through a service that stores it as a string, it is escaped again. A webhook body logged by a queue and then written to an aggregator arrives escaped two or three times over:

"{\"event\":\"order.created\",\"payload\":{\"id\":\"TV-40182\"}}"

Unescape that once and you get JSON. Start one layer further out and unescaping once leaves you with something that still looks broken, so you paste it into the tool again, and again, guessing at how deep it goes.

This tool peels every layer in one pass and shows the chain it removed, so you can see that the payload was escaped three times rather than wondering whether you are done.

The paste people actually make

Copying an escaped payload out of a log rarely brings the surrounding quotes with it. What lands in your clipboard is this:

{\"id\":1,\"ok\":true}

That is not parseable JSON – it is the inside of a string with no string around it – so most tools reject it. This one puts the quotes back and parses it anyway.

Escaping in the other direction

Paste JSON, choose Escape, and you get a single string value ready to assign to a field in another document. Two options change the output:

Wrap in quotes includes the surrounding double quotes, as a real JSON string value has. Turn it off when you are pasting into something that supplies its own quotes.

Escape non-ASCII turns accented and non-Latin characters into \u sequences. JSON is UTF-8 and does not require this, but some older parsers, database drivers and terminal tools handle pure ASCII more predictably.

What the result tells you

After unescaping, the tool says whether what came out is valid JSON or plain text. That distinction matters when you are debugging: if the result is not valid JSON, the escaping was still removed correctly, and what was inside was either plain text or JSON that was already broken before anything escaped it. Knowing which one it is tells you where to look next.

The counts underneath show how many escape sequences were involved, broken down by quotes, backslashes, newlines and unicode escapes. On the escape side it also shows how many bytes the escaping added.

When this is not the right tool

If your JSON is fine and you only want it smaller or more readable, use the JSON Minifier instead – that is a different job. If you are working inside a language rather than a browser, JSON.parse and JSON.stringify, Python’s json.loads, or jq -r do this in one line and belong in your code, not in a tab. And if what you have is not escaping at all but URL encoding – %22 rather than \" – the URL Encoder and Decoder is the right page.

Everything here runs in your browser. Tokens, webhook bodies and customer payloads are never uploaded, which matters for exactly the kind of content that ends up escaped in a log in the first place.

Last reviewed August 2026 · this tool runs on-device.

FAQ

The questions people actually type in.

how to unescape json

Paste the escaped string and press Convert. Every layer of escaping is removed in one pass, and the chain above the result shows how many there were.

what does json stringify do

It turns a JSON document into a single string value, escaping the quotes, backslashes and line breaks inside it so the whole thing can live in one field.

why is my json double escaped

Each service that stores a payload as a string escapes it again. A webhook body logged by a queue and then an aggregator can arrive escaped two or three times.

how do i remove backslashes from json

Those backslashes are escape characters, not stray text. Unescaping removes them correctly, where a find-and-replace would corrupt any backslash that was genuinely part of the data.

can i unescape json without the quotes around it

Yes. Copying from a log usually loses the outer quotes. This tool adds them back and parses anyway, instead of returning an error.

is it safe to paste a token or webhook payload here

It is processed in your browser and never sent anywhere. Load the page, disconnect from the network, and it still works.

what does escape non-ascii do

It turns accented and non-Latin characters into \u sequences. JSON does not require it, but some older parsers and drivers handle pure ASCII more predictably.

my unescaped result is not valid json - what went wrong

Probably nothing here. The escaping was removed correctly; what was inside was plain text, or JSON that was already broken before it was escaped.

Next

Tools people use with this one.

All 29 tools
json -> json.min

JSON minifier

Minify JSON, beautify it back, and see the real compressed size. Flags duplicate keys your parser silently drops.

on-device Open

URL Encoder Decoder

Encode or decode URLs and query values — Component, Full URL or Form mode, single or batch. Decodes recursively, breaks a URL into its parameters, and runs entirely in your browser.

on-device Open