Guides
Troubleshooting and reference material for the errors that come up while working with structured data. Each guide explains what a message actually means, why it happens, and which tool helps you confirm the fix.
Published guides
- ENV FormatterDocker Compose .env Not Loading: Where the Variable Actually GoesMeasured on Compose 5.3.1: a variable in .env reached the image tag but never reached the container. .env feeds interpolation; env_file feeds the container. They are different channels.
- YAML FormatterYAML Indentation Rules: Spaces, Tabs, and the Errors You Never GetThe rules, measured: tabs are banned as indentation but legal in values, two spaces is a convention rather than a rule, and some misaligned files parse silently into the wrong value.
- JWT DecoderWhat's Actually Inside a JWT: Header, Payload, SignatureThree Base64URL segments separated by dots. What each one holds, which claims are standard, and the distinction that matters most: encoded is not encrypted.
- JWT DecoderJWT Expired: Understanding exp, Unix Time, and Clock SkewTokenExpiredError does not always mean the token is old. exp is seconds since the epoch, and the two usual causes are a millisecond timestamp and a clock that disagrees.
- JSON FormatterComments in JSON: Why They Fail, and What JSONC and JSON5 Actually ChangeJSON has no comments, and the error never says so — a // line produces the same message as a trailing comma. What each parser does, and what JSONC and JSON5 change.
- CSV ConverterWhy Your CSV Looks Wrong in Excel: UTF-8, BOM, and MojibakeJosé becomes José, and a stray  appears in the first column. That is a UTF-8 file being read as Windows-1252 — how to recognise it, and why the damage cannot be undone from text alone.
- CSV ConverterExcel Is Changing Your CSV Data: Zeros, Long Numbers, and DatesA ZIP code loses its zeros, an ID becomes 1.23E+18, a product code turns into a date. The file is usually fine — the change happens when the spreadsheet reads it. How to check which.
- Log Sanitizer & Secret RedactionHow to Sanitize Logs Before Sharing ThemPasting a log into a ticket or Slack can hand over live credentials. What to remove, what automated detection reliably catches, and why redacting a copy does not undo an exposure.
- Markdown Table ↔ CSVHow to Copy a ChatGPT Table into Excel or Google SheetsAI assistants answer with Markdown tables — pipes and a row of dashes — which spreadsheets do not split into columns. Convert the table to tab-separated text first, and it pastes into cells.
- CSV ConverterCSV Opens in One Column: Semicolons, Commas, and Your LocaleEverything landing in column A does not mean the file is broken. Two causes look identical: the file uses semicolons, or Excel is splitting on your locale separator. Check the file first.
- JSON FormatterTrailing Comma in JSON: Two Different Errors, and Only One Tells You WhereJSON forbids trailing commas, but V8 reports them two different ways. An object gives you a position, line, and column. An array gives you none of those — measured, with what to do instead.
- JSON FormatterUnexpected end of JSON input: Empty Input or Incomplete JSON?It does not only mean empty. Measured on current V8: this message appears when the input ends where a value should begin — which covers an empty body and several kinds of truncation, but not all of them.
- CSV ConverterCSV Unterminated Quoted Field: One Missing Quote Swallows the Rest of the FileA quote that never closes makes the parser read every following line as part of one field. Measured: a three-row file parses as one row, and the row count is the symptom to look for.
- YAML FormatterYAML "did not find expected key": It’s Indentation, and the Line Number Is Usually WrongOne cause: a mapping key indented to a column that matches no open block. Measured across go-yaml, libyaml, and the yaml package — go-yaml reported an earlier line every time.
- JSON FormatterBad Control Character in String Literal: Raw Newlines and Tabs in JSONA real newline inside a JSON string is invalid; the same newline between two keys is fine. Measured across V8 and Python — which characters break, which do not, and why U+007F is allowed.
- JWT DecoderWhy Your JWT Won't Decode: Segments, Base64URL, and Paddingjwt malformed, Not enough segments, Invalid payload padding — measured across PyJWT and jsonwebtoken. Each message names the check that failed, not the problem: a four-segment token is reported as a padding error.
- JSON FormatterExpecting Property Name Enclosed in Double Quotes — Three Causes, Not OnePython raises this for single-quoted keys, unquoted keys, and a trailing comma alike — the message does not say which. How to tell them apart, and what V8 reports for the same input.
- CSV ConverterCSV Rows With a Different Number of Fields — and What __parsed_extra MeansA row with more or fewer fields than the header is not invalid CSV — but every parser treats it differently. Measured across Papa Parse, Python csv, and Go: extra values, omitted keys, and hard errors.
- JSON FormatterValid JSON, Changed Value: Which Runtimes Preserve Large Integer IDsA JSON document can parse without error and still hand you a different number. Measured across Node, Python, Go, jq, and PostgreSQL: which consumers keep every digit of a large ID, and which do not.
- YAML Formatterkubectl "error converting YAML to JSON": Which Layer Failed, and What the Line Number MeansThe failure happened before Kubernetes read your manifest as a Kubernetes object, so it is never a schema or field-name problem. What the reported line number actually points at, measured.
- ENV FormatterWhy the Same .env File Behaves Differently in Docker, Compose, Node, and PythonMeasured on current versions: docker run --env-file and Docker Compose disagreed on 10 of 14 cases from one .env file. What each consumer does with quotes, #, $, and whitespace.
- JSON FormatterUnexpected token '<', "<!DOCTYPE "... is not valid JSONThe parser is not the problem: your request returned an HTML page instead of JSON. How to read the V8 message, find the real response, and fix the cause.
Guides and tools
A guide explains why something broke. A tool lets you act on it — inspect the payload, compare two responses, or strip secrets before sharing. Guides link to the tool that helps at the point it becomes useful, and every tool runs entirely in your browser.
Browse the full set on the tools page.