Tools · nested data

Unstringify JSON

The reverse of stringify. A string that holds another document opens where it sits, as structure; Pack puts the exact bytes back.

JSON, YAML, XML, CSV, a log file, or something broken. It stays in this tab.
try
no signup · runs entirely in your browser · ⌘V works anywhere on this page

What it does

  • Opens the 2 packed values in the SNS sample in place — the Message body, and the attribute value inside it
  • Shows Unpack on every string value that parses as JSON, XML or YAML — a finding about your data, not a mode you switch on
  • Repeats until nothing inside parses, up to 8 levels — a document inside a string inside a document
  • Pack restores the original bytes rather than re-serializing from the tree
  • Over records — a Kibana export, an NDJSON log — a packed cell opens in the panel as nested rows, and the cell stays the string the file wrote

What it will not do

  • Decode base64, URL-encoding or gzip. A value has to be text that parses.
  • Change a cell in a CSV or a log row. Over records the panel opens the value; the source stays as written.
  • Hold two unpacks in one ledger. Pack after a second Unpack refuses with a reason rather than restoring the wrong bytes.
  • Send your text anywhere. The page is static and the engine runs in this tab — open the network panel and watch it stay empty.

The sample

The text below is what the first chip opens — a real document the engine reads, not an illustration written for this page.

sns-notification.json
{
  "Type": "Notification",
  "MessageId": "8f3aa19c-4d21-4e6b-9c02-fe13a1d04b7e",
  "TopicArn": "arn:aws:sns:eu-west-1:123456789012:checkout-events",
  "Message": "{\"event\":\"stripe.charge.completed\",\"order_id\":\"ord_8f3aa19c4d\",\"amount\":17054,\"currency\":\"usd\",\"customer\":{\"id\":\"cus_4129\",\"email\":\"rin.aoyama@oboro.studio\"}}",
  "Timestamp": "2026-04-21T14:32:08.412Z",
  "MessageAttributes": {
    "payload": { "Type": "String", "Value": "{\"retries\":2,\"source\":\"webhook\"}" }
…

How

  1. Paste the envelope, or the log line that carries it.
  2. Open the tree. The row whose value is a JSON string shows Unpack — press it, or u on the row.
  3. Read the structure in place. Pack, or ⌘Z, puts the string back.

Questions

What is stringified JSON?

JSON written into a string field of another document: every quote escaped as \", every newline as \n. It happens whenever a system stores a payload as text — SNS and SQS envelopes, a log’s message field, a JSON column in a relational database.

How is this different from a JSON unescape tool?

An unescape tool takes the string and hands you the text. Here the string stays in its document: the envelope and the payload read as one tree, and Pack writes the string back where it was.

Does it work on double-encoded JSON?

Yes. Unpack runs again on what it opened until nothing inside parses, up to 8 levels deep.

Can it open XML or YAML inside a field?

Yes — the packed check asks each parser in turn, and the row names the one that opened it.

Try it on the file that broke your afternoon.

free while in alpha · no signup