Provides JsonNode types and associated JsonAdapters.
<dependency>
<groupId>io.avaje</groupId>
<artifactId>avaje-json-node</artifactId>
<version>3.0</version>
</dependency>
var jsonObject = JsonObject.create()
.add("person", JsonObject.create().add("name", "myName").add("active", true))
.add("address", JsonObject.create().add("street", "42 some").add("city", "Bar"));
var jsonArray = JsonArray.create()
.add(42)
.add("foo");
One reason for using JsonNode is to ease the filtering and transformation of json content.
We can use the extract()
methods to help with the Stream API filtering
and mapping.
JsonObject object = mapper.fromJsonObject(content);
JsonArray arrayWithNestedPerson = (JsonArray) object.get("people");
List<String> lastNames =
arrayWithNestedPerson.stream()
.filter(node -> "family".equals(node.extract("type")))
.map(node -> node.extract("person.lastName"))
.toList();
List<JsonNode> peopleNodes =
arrayWithNestedPerson.stream()
.filter(node -> "family".equals(node.extract("type")))
.map(node -> node.extractNode("person"))
.toList();
If you don't need avaje-jsonb then we can just use JsonNodeMapper.
// create a JsonNodeMapper
static final JsonNodeMapper mapper = JsonNodeMapper.builder().build();
JsonArray jsonArray = JsonArray.create()
.add(42)
.add("foo");
var asJson = mapper.toJson(jsonArray);
// read ARRAY from json
JsonArray arrayFromJson = mapper.fromJsonArray(asJson);