object -> {members} | {} members -> member | member,members member-> string:value array -> [elements] | [] elements-> value | value,elements value -> string | object | array | number | "null" | "true" | "false"
object -> {object' object' -> members} | } members -> member member' member' -> ,members | epsilon member-> string:value array -> [array' array' -> elements] | ] elements -> value elements' elements' -> ,elements | epsilon value -> string | object | array | number | "null" | "true" | "false"
- JSON scanner, parser, AST
- Error handling with line/column reporting
- Panic-mode synchronization in JSON parser
- Query scanner, parser, evaluator
- Path-based query language (field, index, wildcard, string key)
- REPL with replxx autocomplete
- CLI argument for JSON file path
- RAII ownership for AST and query steps
- GoogleTest suite
- Complete JSON spec coverage (
\u, all escape sequences) - Query filters, existence checks, aggregations
- Autocomplete for array indices and string-key contexts
- Inspired by
jq: a simpler interactive tool for JSON validation, previewing, and basic querying. - Future: SQL-like filters, transformations (JSON to XML), web UI for AST visualization.
query -> step+
step -> field | array_index | object_index | dot
array_index -> "[" NUMBER "]" | "[" "*" "]"
object_index-> "[" STRING "]"
field -> IDENTIFIER
dot -> "."
Tokens: NUMBER, IDENTIFIER, STRING, LBRACKET, RBRACKET, DOT, QSTAR
| Area | Status |
|---|---|
| JSON scanner/parser/AST | Done |
| Query scanner/parser/evaluator | Done |
| Error handling (JSON + query) | Done |
| REPL autocomplete | Partial |
| Tests (GoogleTest) | Done |
| Query filters / aggregations | Not started |
Full JSON spec (\u escapes) |
Not started |
./json_parser mine.json
json> players
json> [0].player
json> [0].inventory[*].item
json> exit