# Notes on the mess.

Short pieces on the situations the tools answer — where the text came from, why it broke, and what to do about it. Every number in them is measured by the engine when the page is built.

## Why JSON.parse rejects the dict you copied out of a Python log

print() writes a dict with single quotes, True, False and None; JSON allows none of them. The four rules that differ, and how to fix the text you have.

## Kibana Discover CSV export: the message column is JSON

A Discover export is a CSV with ECS columns and, in the message cell, the JSON your service logged, quotes doubled. How to read it as rows and open that cell.

## Double-encoded JSON: how a payload ends up inside a string, and how to read it

SNS envelopes, SQS bodies, Kafka values, text columns, log fields: every hop that stores JSON as text adds a layer of backslashes. How to open them in place.

## logfmt vs JSON logs: what a parser actually needs from a line

A timestamp, a level, a message and the key=value pairs after it turn text into records. Where logfmt and JSON lines fall short, and how a pasted log is read.

## The 20 ways a pasted JSON breaks

Unquoted keys, single quotes, trailing commas, Python literals, comments, a truncated line: the JSON repair steps, from the engine, and where each comes from.

---

Canonical: https://unstringify.com/notes
