100% local — your data never leaves your browser

JSON String to Text — Read the Value Inside

Decode a JSON string literal back to text. Surrounding quotes are optional, and a refusal names what is wrong and where, so you can fix it.

Instant Private Zero cookies

JSON String input

Text output

What this tool does

A JSON string literal becomes the text it represents. "caf\u00e9" gives café, "line\nbreak" gives two lines, and "\ud83d\ude00" gives the emoji — a surrogate pair is one character, not two broken halves.

The quotes are optional

Both of these work:

"caf\u00e9"
caf\u00e9

That is deliberate. A JSON string rarely arrives with its quotes intact: you copy it out of a log line, a git diff, a stack trace, an error message that quoted only the inside. Demanding the quotes would mean adding them back by hand every time.

The cost is a small one, stated plainly: a bare input that happens to be valid JSON of another kind — [1,2], null — is read as text, because that is what a bare fragment means here. Only a quoted input is parsed as a literal.

A refusal says what and where

An input that is not a JSON string is refused rather than half-decoded, and the message names the cause:

InputMessage
a"bUnescaped quotation mark at position 1: write it as \"
"ab\q"Unknown escape "\q" at position 3
"a\u12"Invalid \u escape at position 2: four hexadecimal digits expected
"abcThe opening quotation mark has no closing quotation mark
{"a":1}Expected a JSON string, found a JSON object

Positions count from zero and refer to the text you pasted, so the number takes you to the character.

This is worth stating because it used to be otherwise: every one of these cases produced the single message Invalid JSON string escape sequence. A pasted object is not an escaping mistake, and being told it is sends you looking in the wrong place. That was a real defect in this tool, found while writing this page and fixed.

Nothing is guessed

An unknown escape is an error, not a character. \q is not valid JSON, and deciding it “probably meant q” would hand you text that is subtly different from what the source held — the kind of difference that surfaces three systems later.

Private by design

Everything runs locally in your browser with JavaScript. Your data is never uploaded, which makes the tool safe for sensitive content, and it keeps working offline.

Frequently asked questions

Do I have to include the surrounding quotes?
No. A quoted literal and a bare fragment such as `caf\u00e9` are both accepted, because you often have only the inside of a string — copied out of a log line, a diff, a stack trace. If the quotes are there they are used; if not they are supplied.
Why was my JSON object rejected?
Because this tool decodes one string, not a document. Pasting `{"a":1}` gets you `Expected a JSON string, found a JSON object` rather than a confusing complaint about escapes. To read a whole document, use the JSON formatter or validator instead.
It says "Unescaped quotation mark at position 4". What does that mean?
That character 4 of what you pasted is a `"` that closes the string early. Inside a JSON string a quote has to be written `\"`. Positions count from zero and refer to the text you typed, so you can go straight to the character rather than hunting for it.

Related converters