A comprehensive test suite for RFC 8259 compliant JSON parsers
This repository was created as an appendix to the article Parsing JSON is a Minefield 💣.
/parsers/
This directory contains several parsers and tiny wrappers to turn the parsers into JSON validators, by returning a specific value.
0 the parser did accept the content1 the parser did reject the content>1 the process did crashtimeout happens after 5 seconds/test_parsing/
The name of these files tell if their contents should be accepted or rejected.
y_ content must be accepted by parsersn_ content must be rejected by parsersi_ parsers are free to accept or reject content/test_transform/
These files contain weird structures and characters that parsers may understand differently, eg:
These files were used to produce results/transform.html.
/run_tests.py
Run all parsers with all files:
$ python3 run_tests.py
Run all parsers with a specific file:
$ python3 run_tests.py file.json
Run specific parsers with all files:
$ echo '["Python 2.7.10", "Python 3.5.2"]' > python_only.json
$ python3 run_tests.py --filter=python_only.json
The script writes logs in results/logs.txt.
The script then reads logs.txt and generates results/parsing.html.
/results/

C++
39.9%
Swift
28.0%
Objective-C
13.8%
C
12.6%
Lua
1.4%
Python
1.0%
A comprehensive test suite for RFC 8259 compliant JSON parsers
This repository was created as an appendix to the article Parsing JSON is a Minefield 💣.
/parsers/
This directory contains several parsers and tiny wrappers to turn the parsers into JSON validators, by returning a specific value.
0 the parser did accept the content1 the parser did reject the content>1 the process did crashtimeout happens after 5 seconds/test_parsing/
The name of these files tell if their contents should be accepted or rejected.
y_ content must be accepted by parsersn_ content must be rejected by parsersi_ parsers are free to accept or reject content/test_transform/
These files contain weird structures and characters that parsers may understand differently, eg:
These files were used to produce results/transform.html.
/run_tests.py
Run all parsers with all files:
$ python3 run_tests.py
Run all parsers with a specific file:
$ python3 run_tests.py file.json
Run specific parsers with all files:
$ echo '["Python 2.7.10", "Python 3.5.2"]' > python_only.json
$ python3 run_tests.py --filter=python_only.json
The script writes logs in results/logs.txt.
The script then reads logs.txt and generates results/parsing.html.
/results/

C++
39.9%
Swift
28.0%
Objective-C
13.8%
C
12.6%
Lua
1.4%
Python
1.0%