Tool
JSON Utils
Unwrap nested JSON or Python literal strings and inspect the result as JSON.
Result
Format details
Detected format details will appear after unwrap.
Tree preview appears after unwrap. Unwrap JSON to enable tree folding controls.
No transformed output yet.
What JSON Utils is for
Use this tool when API responses, logs, or message payloads contain JSON or Python literals encoded inside string
fields. You can also paste a supported Python repr() directly to convert it to JSON.
It accepts JSON, supported Python literals, and SSE streams whose data: payloads are JSON.
Python literals inside JSON or SSE string fields unwrap recursively; raw Python SSE payloads are skipped with warnings.
Typical input and expected output
A representative input is a copied payload where one field contains another JSON document as a quoted string.
{"payload":"{\"flag\":\"true\",\"items\":\"[1,2,3]\"}","source":"queue"}
After unwrapping, booleans, arrays, and nested objects become normal JSON values that are easier to inspect or diff.
{
"payload": {
"flag": true,
"items": [
1,
2,
3
]
},
"source": "queue"
}
A Python representation can contain booleans, missing values, tuples, and sets:
{'ok': True, 'missing': None, 'items': (1, 2), 'tags': {'a', 'b'}}
Tuples and sets become JSON arrays, with set members kept in their pasted order:
{
"ok": true,
"missing": null,
"items": [1, 2],
"tags": ["a", "b"]
}
How it behaves
Processing stays in the browser: no Python code is evaluated and no input is sent to a server for parsing. JSON parsing is tried before the Python fallback. Unsupported nested strings stay unchanged; invalid top-level input shows an error with a line, column, and reason. The tree view lets you inspect keys, values, and paths.
The Python subset includes string-keyed dictionaries, lists, single- or double-quoted strings, decimal numbers,
True, False, and None. Whitespace and trailing commas are accepted.
Strings decode escaped quotes, backslashes, control characters, and \x, \u, and
\U escapes. Tuples and sets become arrays, including (), (1,), and
set(). This loses tuple and set semantics; pasted set order is not a guarantee of Python set order.
Input is limited to 5 MB (5,000,000 bytes). Python container nesting is capped at 40 levels; the existing recursive unwrap depth and string-pass limits remain 40.
Good fits and non-goals
This tool is a good fit for webhook payloads, queue messages, copied logs, and test fixtures containing supported JSON or Python literals. It helps when the structure is real but hard to read.
Python bytes, complex or non-finite numbers, non-string dictionary keys, custom object representations,
comprehensions, and function calls other than empty set() are unsupported. Python integer tokens
outside JavaScript's safe integer range are rejected. Inputs that parse as JSON keep the existing JSON number
behavior, including possible rounding of large integers.
Common misunderstandings
Unwrapping is not the same as flattening. The goal is to recover the original nested structure, not to transform the payload into a new schema.
A Python repr() can contain custom object text that is not a supported literal. This tool is not a
Python interpreter or a schema validator, and it does not repair arbitrary mixed log text. Use Log Extractor for
JSON embedded in surrounding log text.
Privacy and usage notes
Input is handled client-side for the core transformation flow. You should still remove secrets before pasting production data into any browser tool, especially when working with logs or customer payloads.
Sponsored
Ad slot is isolated from tool controls.