Actual input. Actual output.
All results are captured, not generated in your browser. Exit 0 means a complete JSON array was parsed and its full string values matched expectations. Rejections produced nonzero exit and empty stdout. Unicode appears as valid JSON escapes. No JavaScript, external assets or network requests are needed.
Comma / quotes / Unicode / newline / backslashes
converted · exit 0/usr/bin/python3 -I -S csv_to_json.py fixtures/comma-specials.csv
Synthetic input
id,note,path
001,"café, 雪 ""ok""
next",C:\data\x
stdout / JSON
[
{
"id": "001",
"note": "caf\u00e9, \u96ea \"ok\"\nnext",
"path": "C:\\data\\x"
}
]
Exact input bytes / SHA256
69642c6e6f74652c706174680d0a3030312c22636166c3a92c20e99baa2022226f6b22220a6e657874222c433a5c646174615c780d0a
SHA256 d7213ded04d6da7ea885f94caf35afddfd67c83d3e5f062bb73cc08efe2f5454
Semicolon, delimiter inside quoted cell
converted · exit 0/usr/bin/python3 -I -S csv_to_json.py fixtures/semicolon.csv --delimiter semicolon
Synthetic input
id;note
007;"a;b"
stdout / JSON
[
{
"id": "007",
"note": "a;b"
}
]
Exact input bytes / SHA256
69643b6e6f74650a3030373b22613b62220a
SHA256 a5a9c76793513e00efd201941edae583584f691426c4ba3d9eb0fa66bb985632
Tab dialect, quoted tab
converted · exit 0/usr/bin/python3 -I -S csv_to_json.py fixtures/tab.csv --dialect excel-tab
Synthetic input
id note
009 "a b"
stdout / JSON
[
{
"id": "009",
"note": "a\tb"
}
]
Exact input bytes / SHA256
6964096e6f74650a3030390922610962220a
SHA256 1423d322a5d25d5cf004e4e731adf3fbc136368aee8eac78bbf2adf1056c39d4
UTF-8 BOM, leading zero
converted · exit 0/usr/bin/python3 -I -S csv_to_json.py fixtures/utf8-bom.csv
Synthetic input
id,v
001,x
stdout / JSON
[
{
"id": "001",
"v": "x"
}
]
Exact input bytes / SHA256
efbbbf69642c760a3030312c780a
SHA256 d10527d332e95f794e3f01b325140cc3406ac4ee4bb68ccd415a549d6b333d18
Explicit Windows-1252 encoding
converted · exit 0/usr/bin/python3 -I -S csv_to_json.py fixtures/encoding.csv --encoding cp1252
Synthetic input
id,v
001,café
stdout / JSON
[
{
"id": "001",
"v": "caf\u00e9"
}
]
Exact input bytes / SHA256
69642c760a3030312c636166e90a
SHA256 252eb66885be9df74b03abe16a88acf15c6d4a427b14e2b8fa53fbfe993addac
Reject missing field
rejected · exit 2/usr/bin/python3 -I -S csv_to_json.py fixtures/ragged-missing.csv
stderr / no JSON stdout
csv_to_json: ragged row at record 2: expected 2 fields, got 1
Exact input bytes / SHA256
612c620a310a
SHA256 551cf7e87e04261c5fc4f1a58b2598b1ddf3b221711faf2ce212b1692b233988
Reject extra field
rejected · exit 2/usr/bin/python3 -I -S csv_to_json.py fixtures/ragged-extra.csv
stderr / no JSON stdout
csv_to_json: ragged row at record 2: expected 2 fields, got 3
Exact input bytes / SHA256
612c620a312c322c330a
SHA256 f47a33245cb42a1f42fe4c947d21bda44d5c97eb7cbdacd4112fdd859709cdbf
Reject duplicate header
rejected · exit 2/usr/bin/python3 -I -S csv_to_json.py fixtures/duplicate-header.csv
stderr / no JSON stdout
csv_to_json: duplicate header
Exact input bytes / SHA256
612c610a312c320a
SHA256 921520be8279e81db6a46688da4ae835cadd820a6892a557e3bfe1b06746b711
Reject empty header
rejected · exit 2/usr/bin/python3 -I -S csv_to_json.py fixtures/empty-header.csv
stderr / no JSON stdout
csv_to_json: empty input or empty header
Exact input bytes / SHA256
612c0a312c320a
SHA256 07ee34f85a3c3c338c9071f8a4827cded3dc0e8697d24cc1add80b0ec85766b8
Reject unterminated quote
rejected · exit 2/usr/bin/python3 -I -S csv_to_json.py fixtures/unclosed-quote.csv
Synthetic input
a,b
1,"open
stderr / no JSON stdout
csv_to_json: malformed quote: unterminated quoted field
Exact input bytes / SHA256
612c620a312c226f70656e
SHA256 3ea6ee002867d408c843fbc62fd6d644ec31f0c53b60299268d0b80107449d7f
Reject quote inside unquoted cell
rejected · exit 2/usr/bin/python3 -I -S csv_to_json.py fixtures/bare-quote.csv
Synthetic input
a,b
1,ba"re
stderr / no JSON stdout
csv_to_json: malformed quote: quote inside unquoted field
Exact input bytes / SHA256
612c620a312c62612272650a
SHA256 7d711f89146d3b7de044d634f19681c1c0c437e9fe13bda22b5502afc0c031f1
Repeatable, within its limits.
The CLI defaults to comma and UTF-8 with optional BOM. Explicit delimiter, dialect and encoding options are available. Quoted newlines, doubled quotes and literal backslashes are preserved. No type inference, automatic delimiter guessing, nested schema or spreadsheet support is claimed.
This intentionally small prototype buffers the input and JSON array in memory. The Python csv field-size limit is retained. It is not a streaming large-file tool, and the synthetic suite does not establish compatibility with every CSV producer.
Actual converter test command
/usr/bin/python3 -I -S test_csv.py
Complete real converter test output
test_comma_unicode_backslash_quotes_newline (__main__.CsvTests.test_comma_unicode_backslash_quotes_newline) ... ok
test_crlf_inside_quotes (__main__.CsvTests.test_crlf_inside_quotes) ... ok
test_empty_cells_and_header_only (__main__.CsvTests.test_empty_cells_and_header_only) ... ok
test_encoding_override (__main__.CsvTests.test_encoding_override) ... ok
test_explicit_delimiter_overrides_dialect (__main__.CsvTests.test_explicit_delimiter_overrides_dialect) ... ok
test_file_input_and_missing_file (__main__.CsvTests.test_file_input_and_missing_file) ... ok
test_invalid_encoding_and_delimiter (__main__.CsvTests.test_invalid_encoding_and_delimiter) ... ok
test_quote_only_and_json_escaping (__main__.CsvTests.test_quote_only_and_json_escaping) ... ok
test_reject_malformed_quotes_no_partial_stdout (__main__.CsvTests.test_reject_malformed_quotes_no_partial_stdout) ... ok
test_reject_ragged_duplicate_empty_headers (__main__.CsvTests.test_reject_ragged_duplicate_empty_headers) ... ok
test_semicolon (__main__.CsvTests.test_semicolon) ... ok
test_tab_dialect (__main__.CsvTests.test_tab_dialect) ... ok
test_unit_strings (__main__.CsvTests.test_unit_strings) ... ok
test_utf8_bom (__main__.CsvTests.test_utf8_bom) ... ok
----------------------------------------------------------------------
Ran 14 tests in 1.213s
OK
Executed csv_to_json.py SHA256
1bb989936d1cb44ff74e4fef6b1a40a8881cbf09599a59fcdff69ae520f97903
Local evidence captured at 2026-10-27T02:20:20.390903+00:00. CLI source and operational tooling are deliberately not distributed by this public results page.