Blog
Practical guides to working with JSON, XML, YAML and TOML — opening files, reading the errors that actually come up, and the traps in each format that change your data without telling you.
Browse by format
- JSON4 articlesWorking with JSONReading and repairing JSON, and the places it quietly changes your data on the way through. Open JSON guides
- XML2 articlesWorking with XMLOpening XML without something mangling it first, and the pieces of the spec that still matter. Open XML guides
- YAML1 articleWorking with YAMLThe traps in a format designed to be readable — type coercion, tabs, and parsers that disagree. Open YAML guides
- TOML1 articleWorking with TOMLThe config format that picked strictness over flexibility, and what that costs you. Open TOML guides
- CSV1 articleWorking with CSVThe format with no real specification, and the spreadsheet that rewrites it the moment you double-click. Open CSV guides
- INI2 articlesWorking with INIThe config format every language reimplemented from memory, and the six places those guesses disagree. Open INI guides
- Encoding2 articlesEncoding and escapingBase64, hex and percent-encoding — three ways to move bytes through a channel that will not carry them. Open Encoding guides
Latest
CSV vs Excel: which one to hand someone, and which one to keep
They hold the same rows, so the choice looks like taste. It is not — one of them rewrites your data on the way in, and the other cannot describe what your data means.
Read the guideThe same INI file, two different configs
INI has no specification, so every language guessed. Six places Python and Node read the same file differently — and the three that never tell you.
Read the guideBase64 is not encryption
It looks scrambled, so it gets treated as protected. It is not. What Base64 is actually for, and the silent corruption btoa causes on the way.
Read the guidePercent-encoding, and why your URL breaks
encodeURI is not encodeURIComponent, + only means space in half a URL, and %2F becomes %252F the moment two layers both try to help. Every claim here printed from a Node console.
Read the guide