Unescape · parse · format — instantly

Convert JSON string
to JSON object.
Auto-detect depth.

Paste an escaped JSON string, a double-encoded JSON value or a JSON string wrapped in quotes. The converter unescapes, parses and pretty-prints the result automatically — no setup needed.

Your data never leaves your browser
Auto-detects encoding depth
Handles escaped & double-encoded JSON
Exact parse error location
Always free
JSON String to JSON Converter   100% client-side
Paste any of these: an escaped JSON string "{\"name\":\"Alice\"}", a double-encoded value, or a raw JSON string without outer quotes.
Try an example:
Input — paste your JSON string here
  JSON ready

      

What is an escaped JSON string?

Understanding the three types of input this tool handles.

Escaped JSON string
// Input — a string with backslash escapes:
"{\"id\":1,\"name\":\"Alice\"}"
 
// Output — parsed JSON object:
{
  "id": 1,
  "name": "Alice"
}
Double-encoded JSON
// Input — JSON.stringify called twice:
"\"{\\\"id\\\":1,\\\"name\\\":\\\"Alice\\\"}\""
 
// Output — fully unwrapped object:
{
  "id": 1,
  "name": "Alice"
}
String value in JSON
// Input — a field whose value is a JSON string:
{"data": "{\"id\":1,\"name\":\"Alice\"}"}
 
// Output with inner strings parsed:
{
  "data": {"id": 1, "name": "Alice"}
}
Unicode-escaped JSON
// Input — unicode escape sequences:
{"name":"\u0041\u006C\u0069\u0063\u0065"}
 
// Output — decoded characters:
{
  "name": "Alice"
}

Why does JSON get double-encoded?

The most common causes of escaped or double-encoded JSON.

Double JSON.stringify()

The most common cause. A developer calls JSON.stringify() on a value that is already a JSON string — producing a string representation of a string. Common in Express.js when res.json() is called with an already-serialised string.

JSON stored as TEXT in a database

When JSON is stored in a database column typed as TEXT or VARCHAR (rather than JSON/JSONB), reading it back produces a string. If the application then serialises that string again when building the API response, the JSON ends up double-encoded.

Message queues and event streams

Kafka, AWS SQS and Azure Service Bus messages are strings. When a JSON payload is placed into a queue and then embedded in another JSON envelope for the API response, the inner payload becomes a double-encoded JSON string.

Legacy APIs and webhooks

Some older APIs and webhook payloads return JSON serialised as a string value within a wrapper object — e.g. {"payload": "{...}"}. This was a common pattern before JSON became ubiquitous as a native type.

JSON string to JSON online: fix broken strings from logs, chats and Python

Strings copied from logs, chat exports or Python output are often not valid JSON: single quotes, trailing commas, comments, unquoted keys or Python literals such as None, True and False. Instead of failing, this JSON string to JSON converter repairs them automatically and shows a notice so you know the input was changed. Integers longer than 15 digits (64-bit IDs) are kept exact instead of being rounded.

Once you have the object, explore it in the JSON Viewer, minify it with the JSON Minifier, or turn it back into an escaped string with JSON to JSON String.

Related JSON tools

All utilities & encoding tools

Unescaped in
your browser. No upload.

The entire parsing runs in JavaScript locally using the browser's native JSON.parse() — the fastest and most standards-compliant JSON parser available. Your data is never transmitted to any server.

Auto-detect mode tries up to 5 unwrap passes — stopping as soon as the result is a non-string JSON value. This handles single-encoded, double-encoded and triple-encoded strings without any configuration.

Native JSON.parse()

Uses the browser's built-in parser — no external library, no dependencies. The fastest and most compliant option.

Auto-detect encoding depth

Iteratively unwraps string layers until a non-string JSON value is reached — handles 1, 2 or 3 layers of encoding transparently.

Exact error location

Parse errors include the character position from the browser's native parser — easier to debug than a generic "invalid JSON" message.

52 tools, always free

No watermarks, no account. Funded by non-intrusive display advertising only.

Frequently asked questions

Common questions about parsing and unescaping JSON strings.

How do I convert a JSON string to a JSON object?

Paste your escaped JSON string into the converter above and click Parse. The tool automatically detects whether the input is a single-layer escaped string, a double-encoded string or a raw JSON string, unescapes it and outputs formatted JSON.

What is the difference between a JSON string and a JSON object?

A JSON object is a data structure like {"name": "Alice"}. A JSON string is a JavaScript string that contains serialised JSON — like "{\"name\":\"Alice\"}" — the result of calling JSON.stringify() on the object. This tool converts the string back to the object.

Why does my JSON have backslashes before every quote?

Backslashes before quotes (\") are escape characters that appear when JSON is serialised as a string value — typically by calling JSON.stringify() on an already-serialised JSON object. This tool removes the backslashes and parses the result back to a proper JSON object.

How do I fix double-encoded JSON from an API?

Paste the double-encoded value here and click Parse — auto-detect mode will unwrap it automatically. In your code, call JSON.parse() twice: const parsed = JSON.parse(JSON.parse(responseString)). The root cause is usually a server calling JSON.stringify() on a value that is already a JSON string.

Is my JSON data safe when using this tool?

Yes. The conversion runs entirely in your browser. Your JSON is never uploaded to any server. Open the Network inspector during conversion and you will see zero outbound data requests.

Can it convert a JSON string with single quotes or Python None/True?

Yes. Single quotes, trailing commas, comments, unquoted keys and the Python literals None, True and False are repaired automatically, and a notice tells you the input was changed so you can check the result.

How many levels of escaping can it remove?

Auto mode unwraps up to five layers of JSON.stringify or json.dumps and tells you how many it found. You can also force a specific number of layers.
Go up