Tools

Unpacking

Another system's output, hiding inside a field of yours.

In the app

A value that parses as JSON, XML or YAML shows Unpack on its row; u opens it in place and names the parser. Over a document the text is rewritten with the ledger as the way back; over records the value opens in the panel and the cell stays as the file wrote it.

Pack restores the original bytes, not a re-serialization from the tree.

JSON inside JSON — The Message value is a JSON string; Unpack on its row opens it in place — the text is rewritten, and Pack puts the string back. · 7 s

Across the two shapes

A verb is implemented once per shape, not once per format. That is why a CSV gets the same tools as a webhook payload: both collapse to one of two shapes before any verb runs.

How the shapes differ for unpack: nested strings, any depth.

  • document · JSON, YAML, XML
  • records · NDJSON, CSV, TSV, Markdown table, Log

Which formats can hold packed data

The verb belongs to the shape; the question "is this value packed?" belongs to the adapter. An adapter that never sees packed values simply does not answer it.

  • JSON · can open packed values
  • YAML · can open packed values
  • XML · can open packed values
  • NDJSON · can open packed values
  • CSV · can open packed values
  • TSV · can open packed values
  • Markdown table · can open packed values
  • Log · can open packed values
8 of 8 adapters declare a packed case.

A worked example

The SNS envelope holds 2 packed values — the Message body, and the attribute value inside it — and both show Unpack on their rows. The Kibana export’s message column holds 3 cells of JSON; over records they open in the panel and the cells stay as the file wrote them.

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\"}" }
…