Test files › Structured data
Sample Structured data test files
Free structured data test files for QA and developers: 1million-rows.csv, bom-and-semicolons.csv, formula-injection.csv, quoting-nightmare.csv, ragged-rows.csv, valid-simple.csv and more. Each with a published SHA-256 and a note on what it catches.
| File | Format | Size | What it catches |
1million-rows.csv | CSV | 34.1 MB | 1,000,000 data rows, roughly 65 MB. Exceeds the Excel worksheet row limit of 1,048,576 minus headers. |
bom-and-semicolons.csv | CSV | 124 bytes | UTF-8 BOM, semicolon delimiters and comma decimal separators - the format Excel produces in most European locales. |
formula-injection.csv | CSV | 357 bytes | Cells beginning with =, +, -, @ and tab, which spreadsheet applications interpret as formulas. The payloads are non-destructive: they reference HYPERLINK and a harmless calculation. |
quoting-nightmare.csv | CSV | 407 bytes | Every RFC 4180 quoting edge case in one file: embedded commas, embedded newlines inside quoted fields, escaped double quotes, leading and trailing whitespace, and empty fields. |
ragged-rows.csv | CSV | 123 bytes | Rows with too few and too many columns relative to the header. |
valid-simple.csv | CSV | 4.3 KB | Header row plus 100 rows of clean, unquoted ASCII data. |
deeply-nested-100000.json | JSON | 195 KB | A single value wrapped in 100,000 levels of nested arrays. Only ~200 KB on disk. |
large-array-100mb.json | JSON | 100 MB | Roughly 100 MB single JSON array of ~400,000 uniform record objects. |
malformed-trailing-comma.json | JSON | 24 bytes | JSON with a trailing comma before the closing brace - invalid per RFC 8259. |
ndjson-10000-lines.ndjson | NDJSON | 654 KB | Newline-delimited JSON, 10,000 records, one object per line. |
precision-loss.json | JSON | 319 bytes | Integers and decimals that exceed IEEE-754 double precision: 64-bit IDs, high-precision decimals, and values at MAX_SAFE_INTEGER boundaries. |
valid-small.json | JSON | 382 bytes | Well-formed JSON object with nested arrays, nulls, booleans, unicode and escaped characters. |
billion-laughs.xml | XML | 794 bytes | Classic entity-expansion bomb: nine levels of entities each referencing the previous ten times. Under 1 KB on disk, expands to ~1 GB of text if entity expansion is unbounded. |
unclosed-tag.xml | XML | 51 bytes | XML with a tag that is never closed. |
valid.xml | XML | 395 bytes | Well-formed XML with namespaces, attributes, CDATA and a comment. |
xxe-file-disclosure.xml | XML | 141 bytes | XML declaring an external entity that reads a local file. Targets /etc/hostname - deliberately innocuous rather than /etc/passwd. |
norway-problem.yaml | YAML | 161 bytes | YAML 1.1 implicit-typing traps: unquoted NO becomes false, unquoted YES becomes true, version strings become floats, and leading-zero values parse as octal. |
tabs-invalid.yaml | YAML | 34 bytes | YAML indented with tab characters, which the specification forbids. |