https://github.com/iamdudeman/sola-json
A lightweight, zero-dependency JSON parser for Java
https://github.com/iamdudeman/sola-json
java java-17 json parser zero-dependencies
Last synced: 2 months ago
JSON representation
A lightweight, zero-dependency JSON parser for Java
- Host: GitHub
- URL: https://github.com/iamdudeman/sola-json
- Owner: iamdudeman
- License: mit
- Created: 2022-01-12T02:42:27.000Z (about 4 years ago)
- Default Branch: main
- Last Pushed: 2026-01-02T17:12:13.000Z (3 months ago)
- Last Synced: 2026-01-09T03:21:03.705Z (3 months ago)
- Topics: java, java-17, json, parser, zero-dependencies
- Language: Java
- Homepage:
- Size: 12.3 MB
- Stars: 2
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# sola-json
SolaJson is a lightweight JSON parsing library for Java 17+ that uses no additional libraries internally.
It started as a project to continue learning about building parsers based on language grammars.
[](https://github.com/iamdudeman/sola-json/actions/workflows/ci_build.yml)
[](https://iamdudeman.github.io/sola-json/)
[](https://jitpack.io/#iamdudeman/sola-json)
Parser definition based on [json.org](https://www.json.org/json-en.html)
## Download
### Gradle + Jitpack:
```kotlin
repositories {
maven {
url = uri("https://jitpack.io")
}
}
dependencies {
implementation("com.github.iamdudeman:sola-json:2.1.3")
}
```
[sola-json jar downloads](https://github.com/iamdudeman/sola-json/releases) hosted on GitHub releases.
## Example usages
### Basic Usage
```java
public class BasicUsage {
public static void main(String[] args) {
String jsonString = """
{
"key": "value"
}
""";
SolaJson solaJson = new SolaJson();
JsonObject root = solaJson.parse(jsonString).asObject();
System.out.println(root.getString("key"));
root.put("key2", 10);
System.out.println(solaJson.stringify(root));
}
}
```
```shell
# Output
value
{"key":"value","key2":10}
```
### Usage with JsonMapper
```java
public class JsonMapperUsage {
public static void main(String[] args) {
String input = """
{
"value": 1
}
""";
SolaJson solaJson = new SolaJson();
Pojo result = solaJson.parse(input, JSON_MAPPER);
System.out.println(result.value());
Pojo pojo = new Pojo(10);
System.out.println(solaJson.stringify(pojo, JSON_MAPPER));
}
public record Pojo(int value) {
}
static JsonMapper JSON_MAPPER = new JsonMapper<>() {
@Override
public JsonObject toJson(Pojo object) {
JsonObject jsonObject = new JsonObject();
jsonObject.put("value", object.value());
return jsonObject;
}
@Override
public TestPojo toObject(JsonObject jsonObject) {
return new Pojo(jsonObject.getInt("value"));
}
};
}
```
```shell
# Output
1
{"value":1}
```
## Grammar
### Terminals
```
COLON := :
COMMA := ,
FALSE := false
L_BRACKET := [
L_CURLY := {
NULL := null
NUMBER := ((-[1-9])|0)[0-9]+(.[0-9]+)?([eE][-+]?[0-9]+)
R_BRACKET := ]
R_CURLY := }
STRING := " (Any codepoint except " or \ or control characters) "
TRUE := true
```
### Rules
```
:= |
:= L_CURLY ( (COMMA )*)? R_BRACKET
:= L_BRACKET ( (COMMA )*)? R_BRACKET
:= STRING COLON
:= STRING | NUMBER | | | TRUE | FALSE | NULL
```
## Testing
### Validity
Used test files from [JSON.org](https://www.json.org/JSON_checker/) to verify parser functionality.
### Performance
Used data from [JSON placeholder](https://jsonplaceholder.typicode.com/) (small files) and San Francisco data (big file)
for performance testing.
Benchmarked against [Google gson](https://github.com/google/gson) and [Jackson](https://github.com/FasterXML/jackson).
[jmh](https://github.com/openjdk/jmh) benchmark file can be
viewed [here](src/test/java/technology/sola/json/jmh/SolaJsonBenchmark.java)
Execute benchmark view Gradle task `jmhBenchmark` in verification category.
Results:
```
Benchmark Mode Cnt Score Error Units
SolaJsonBenchmark.gsonBig ss 50 21.239 ± 2.119 ms/op
SolaJsonBenchmark.gsonSmall ss 50 3.238 ± 0.234 ms/op
SolaJsonBenchmark.jacksonBig ss 50 16.775 ± 1.209 ms/op
SolaJsonBenchmark.jacksonSmall ss 50 3.436 ± 0.438 ms/op
SolaJsonBenchmark.solaJsonBig ss 50 26.956 ± 1.810 ms/op
SolaJsonBenchmark.solaJsonBigTokenizeOnly ss 50 17.729 ± 0.857 ms/op
SolaJsonBenchmark.solaJsonSmall ss 50 5.865 ± 0.296 ms/op
```