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.

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.

```
{
  "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

- Paste the envelope, or the log line that carries it.
- Open the tree. The row whose value is a JSON string shows Unpack — press it, or u on the row.
- 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.

## Behind this page

## Try it on the file that broke your afternoon.

free while in alpha · no signup

---

Canonical: https://unstringify.com/tools/unstringify-json
