A backport of the experimental java.util.json API from the OpenJDK jdk-sandbox “json” branch, plus an incubating JSON Type Definition (JTD) validator (RFC 8927).
<dependency>
<groupId>io.github.simbo1905.json</groupId>
<artifactId>java.util.json</artifactId>
<version>2026.01.26</version>
</dependency>
import jdk.sandbox.java.util.json.*;
JsonObject obj = (JsonObject) Json.parse("{\"name\":\"Alice\",\"age\":30}");
String name = obj.get("name").string();
long age = obj.get("age").toLong();
JsonObject, JsonArray, JsonString, JsonNumber, JsonBoolean, JsonNullJsonObject.of, JsonArray.of, JsonString.of, JsonNumber.of, JsonBoolean.ofobj.get("x").string(), value.toLong(), value.toDouble(), value.bool()json-java21-jtd for real-world JSON-heavy logicimport jdk.sandbox.java.util.json.*;
import java.util.*;
record User(String name, String email, boolean active) {}
record Team(String teamName, List<User> members) {}
Team team = new Team("Engineering", List.of(
new User("Alice", "alice@example.com", true),
new User("Bob", "bob@example.com", false)
));
JsonValue teamJson = JsonObject.of(Map.of(
"teamName", JsonString.of(team.teamName()),
"members", JsonArray.of(team.members().stream()
.map(u -> JsonObject.of(Map.of(
"name", JsonString.of(u.name()),
"email", JsonString.of(u.email()),
"active", JsonBoolean.of(u.active())
)))
.toList())
));
mvn package
java -cp ./json-java21/target/java.util.json-*.jar:./json-java21/target/test-classes \
jdk.sandbox.java.util.json.examples.ReadmeExamples
# Run human-readable report
mvn exec:java -pl json-compatibility-suite
# Run JSON output (dogfoods the API)
mvn exec:java -pl json-compatibility-suite -Dexec.args="--json"
import json.java21.jtd.Jtd;
import jdk.sandbox.java.util.json.*;
JsonValue schema = Json.parse("""
{
"properties": {
"name": {"type": "string"},
"age": {"type": "int32"}
}
}
""");
JsonValue data = Json.parse("{\"name\":\"Alice\",\"age\":30}");
Jtd.Result result = new Jtd().validate(schema, data);
// result.isValid() == true