https://github.com/cheapnightbot/json-scanner
Hand-made scanner for JavaScript Object Notation (JSON). Just for FUN & LEARNING ~!
https://github.com/cheapnightbot/json-scanner
c hand-made-scanner json lexical-parser scanner
Last synced: about 1 month ago
JSON representation
Hand-made scanner for JavaScript Object Notation (JSON). Just for FUN & LEARNING ~!
- Host: GitHub
- URL: https://github.com/cheapnightbot/json-scanner
- Owner: CheapNightbot
- License: mit
- Created: 2024-09-25T05:53:48.000Z (over 1 year ago)
- Default Branch: main
- Last Pushed: 2024-10-10T12:19:24.000Z (over 1 year ago)
- Last Synced: 2025-03-19T06:35:33.479Z (about 1 year ago)
- Topics: c, hand-made-scanner, json, lexical-parser, scanner
- Language: C
- Homepage:
- Size: 21.5 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# json-scanner ~ just as cheap as me...
Hand-made scanner for JavaScript Object Notation (**JSON**). Just for FUN & LEARNING ~!

> [!NOTE]
> There are lot of things to do. For example, it does NOT care about special character or escape squences inside the string and will identify them as an error.
## ⟫ Example ?
Running this scanner on following test **JSON** file... :
```json
{
"firstName": "John",
"lastName": "Doe",
"email": "john.doe@web.com",
"age": 17,
"adult": false,
"favoriteColors: ["Red", "Green", "Blue"],
"country": null,
notValid: true
}
```
... will print following output in the terminal:
CLICK TO VIEW
```bash
TOKEN | LINE:CHAR | TEXT
-------------+---------------+-------------
LBRACE | 1:1 | {
-------------+---------------+-------------
STRING_KEY | 2:5 | "firstName"
-------------+---------------+-------------
COLON | 2:16 | :
-------------+---------------+-------------
STRING_VALUE | 2:18 | "John"
-------------+---------------+-------------
COMMA | 2:24 | ,
-------------+---------------+-------------
STRING_KEY | 3:5 | "lastName"
-------------+---------------+-------------
COLON | 3:15 | :
-------------+---------------+-------------
STRING_VALUE | 3:17 | "Doe"
-------------+---------------+-------------
COMMA | 3:22 | ,
-------------+---------------+-------------
STRING_KEY | 4:5 | "email"
-------------+---------------+-------------
COLON | 4:12 | :
-------------+---------------+-------------
STRING_VALUE | 4:14 | "john.doe@web.com"
-------------+---------------+-------------
COMMA | 4:32 | ,
-------------+---------------+-------------
STRING_KEY | 5:5 | "age"
-------------+---------------+-------------
COLON | 5:10 | :
-------------+---------------+-------------
NUMBER | 5:12 | 17
-------------+---------------+-------------
STRING_KEY | 6:5 | "adult"
-------------+---------------+-------------
COLON | 6:12 | :
-------------+---------------+-------------
FALSE | 6:14 | false
-------------+---------------+-------------
COMMA | 6:19 | ,
-------------+---------------+-------------
ERROR | 7:20 | "favoriteColors <- Closing Quote is missing.
-------------+---------------+-------------
COLON | 7:20 | :
-------------+---------------+-------------
LBRACKET | 7:22 | [
-------------+---------------+-------------
STRING_VALUE | 7:23 | "Red"
-------------+---------------+-------------
COMMA | 7:28 | ,
-------------+---------------+-------------
STRING_VALUE | 7:30 | "Green"
-------------+---------------+-------------
COMMA | 7:37 | ,
-------------+---------------+-------------
STRING_VALUE | 7:39 | "Blue"
-------------+---------------+-------------
RBRACKET | 7:45 | ]
-------------+---------------+-------------
COMMA | 7:46 | ,
-------------+---------------+-------------
STRING_KEY | 8:5 | "country"
-------------+---------------+-------------
COLON | 8:14 | :
-------------+---------------+-------------
NULL | 8:16 | null
-------------+---------------+-------------
COMMA | 8:20 | ,
-------------+---------------+-------------
ERROR | 9:13 | notValid <- Unknown or incomplete token.
-------------+---------------+-------------
COLON | 9:13 | :
-------------+---------------+-------------
TRUE | 9:15 | true
-------------+---------------+-------------
RBRACE | 10:1 | }
-------------+---------------+-------------
```
## ⟫ Compile & Run
- Make sure `make` is installed. Following command can be used for Debian based distros to install it:
```bash
sudo apt update && sudo apt install make
```
- Compile it with the following command:
```bash
make sjson
```
- A new directory `build` will be created. `cd` into it and run `sjson` on any valid `.json` file:
```bash
cd build/
./sjson test.json
```