Go JSON Parser
A high-performance JSON parser implementation in Go, built from scratch.
This project follows a step-by-step approach
to building a fully-featured JSON parser with comprehensive test coverage and validation capabilities.
Features
- π High-performance lexical and syntactic analysis
- π Detailed error reporting with line and column information
- β
Full JSON specification support
- π Optional performance benchmarking
- π Strict mode validation
- π» Command-line interface
- π Comprehensive test suite
Requirements
- Go 1.19 or higher
- Make (optional, for using the Makefile)
Installation
- Clone the repository:
git clone https://github.com/letsmakecakes/json-parser.git
cd json-parser
- Build the project:
make build
Or using Go directly:
go build -o build/jsonparser ./cmd/parser
Usage
Basic Usage
Parse a JSON file:
./build/jsonparser input.json
Parse from standard input:
echo '{"key": "value"}' | ./build/jsonparser -
Command Line Options
Usage: jsonparser [options] [file]
Options:
-file string
JSON file to parse (use '-' for stdin)
-verbose
Enable verbose output
-benchmark
Show parsing time
-strict
Enable strict mode validation
Examples
- Parse with verbose output:
./build/jsonparser -verbose input.json
- Parse with benchmarking:
./build/jsonparser -benchmark input.json
- Parse in strict mode:
./build/jsonparser -strict input.json
Project Structure
.
βββ cmd
β βββ parser
β βββ main.go # Main entry point
βββ internal
β βββ lexer # Lexical analysis
β β βββ lexer.go
β β βββ token.go
β β βββ lexer_test.go
β βββ parser # Syntactic analysis
β β βββ parser.go
β β βββ ast.go
β β βββ parser_test.go
β βββ validator # JSON validation
β βββ validator.go
β βββ validator_test.go
βββ pkg
β βββ errors # Error definitions
β βββ errors.go
βββ test # Test files
β βββ step1
β βββ step2
β βββ step3
β βββ step4
β βββ step5
βββ go.mod
βββ go.sum
βββ Makefile
βββ README.md
Development
Running Tests
Run all tests:
make test
Run specific test steps:
make test-step1
make test-step2
make test-step3
make test-step4
Development Commands
Format code:
make fmt
Run linter:
make lint
Clean build artifacts:
make clean
Error Handling
The parser provides detailed error messages with line and column information:
Error:
{"key": "value",}
^
unexpected comma at line 1, column 16
Implementation Steps
- Step 1: Basic JSON object parsing (
{}
)
- Step 2: String key-value pairs
- Step 3: Multiple data types (strings, numbers, booleans, null)
- Step 4: Nested objects and arrays
- Step 5: Comprehensive validation and error handling
The parser includes optional benchmarking capabilities. When run with the -benchmark
flag, it provides:
- Total parsing time
- Processing speed (MB/s)
Contributing
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature
)
- Commit your changes (
git commit -m 'Add amazing feature'
)
- Push to the branch (
git push origin feature/amazing-feature
)
- Open a Pull Request
License
This project is licensed under the MIT Licenseβsee the LICENSE file for details.
Acknowledgments
- Inspired by the JSON specification
- Built the following best practices from the "Dragon Book" (Compilers: Principles, Techniques, and Tools)
Author
Adwaith Rajeev (@letsmakecakes)
Support
If you have any questions or run into issues, please open an issue in the GitHub repository.