diff --git a/json-2/pom.xml b/json-2/pom.xml
index d674d6f86d..f0215a375f 100644
--- a/json-2/pom.xml
+++ b/json-2/pom.xml
@@ -49,6 +49,66 @@
commons-lang3
${commons-lang3.version}
+
+
+ com.fasterxml.jackson.core
+ jackson-annotations
+ 2.11.0
+
+
+ com.fasterxml.jackson.core
+ jackson-databind
+ 2.11.0
+
+
+ com.io-informatics.oss
+ jackson-jsonld
+ 0.1.1
+
+
+ jackson-databind
+ com.fasterxml.jackson.core
+
+
+ jackson-annotations
+ com.fasterxml.jackson.core
+
+
+ jackson-core
+ com.fasterxml.jackson.core
+
+
+ jsonld-java
+ com.github.jsonld-java
+
+
+
+
+ de.escalon.hypermedia
+ hydra-jsonld
+ 0.4.2
+
+
+ jackson-databind
+ com.fasterxml.jackson.core
+
+
+
+
+ com.github.jsonld-java
+ jsonld-java
+ 0.13.0
+
+
+ jackson-core
+ com.fasterxml.jackson.core
+
+
+ jackson-databind
+ com.fasterxml.jackson.core
+
+
+
0.9.23
diff --git a/json-2/src/test/java/com/baeldung/jsonld/deserialization/jsonldjava/jackson/JacksonDeserializationUnitTest.java b/json-2/src/test/java/com/baeldung/jsonld/deserialization/jsonldjava/jackson/JacksonDeserializationUnitTest.java
new file mode 100644
index 0000000000..9c6b6f976a
--- /dev/null
+++ b/json-2/src/test/java/com/baeldung/jsonld/deserialization/jsonldjava/jackson/JacksonDeserializationUnitTest.java
@@ -0,0 +1,55 @@
+package com.baeldung.jsonld.deserialization.jsonldjava.jackson;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+import java.io.IOException;
+import java.util.HashMap;
+
+import org.junit.jupiter.api.Test;
+
+import com.baeldung.jsonld.deserialization.jsonldjava.jackson.Person.Link;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.github.jsonldjava.core.JsonLdOptions;
+import com.github.jsonldjava.core.JsonLdProcessor;
+import com.github.jsonldjava.utils.JsonUtils;
+
+public class JacksonDeserializationUnitTest {
+
+ @Test
+ void givenAJsonLdObject_whenCompactIsUsedWithEmptyContext_thenItCanBeDeserializedWithJackson() throws IOException {
+ String inputJsonLd = "{"
+ + "\"@context\":{"
+ + "\"@vocab\":\"http://schema.org/\","
+ + "\"knows\":{\"@type\":\"@id\"}"
+ + "},"
+ + "\"@type\":\"Person\","
+ + "\"@id\":\"http://example.com/person/1234\","
+ + "\"name\":\"Example Name\","
+ + "\"knows\":\"http://example.com/person/2345\""
+ + "}";
+
+ Object jsonObject = JsonUtils.fromString(inputJsonLd);
+ Object compact = JsonLdProcessor.compact(jsonObject, new HashMap<>(), new JsonLdOptions());
+ String compactContent = JsonUtils.toString(compact);
+
+ assertEquals("{"
+ + "\"@id\":\"http://example.com/person/1234\","
+ + "\"@type\":\"http://schema.org/Person\","
+ + "\"http://schema.org/knows\":{\"@id\":\"http://example.com/person/2345\"},"
+ + "\"http://schema.org/name\":\"Example Name\""
+ + "}", compactContent);
+
+ ObjectMapper objectMapper = new ObjectMapper();
+ Person person = objectMapper.readValue(compactContent, Person.class);
+
+ Person expectedPerson = new Person();
+ expectedPerson.id = "http://example.com/person/1234";
+ expectedPerson.name = "Example Name";
+ expectedPerson.knows = new Link();
+ expectedPerson.knows.id = "http://example.com/person/2345";
+
+ assertEquals(expectedPerson.id, person.id);
+ assertEquals(expectedPerson.name, person.name);
+ assertEquals(expectedPerson.knows.id, person.knows.id);
+ }
+}
diff --git a/json-2/src/test/java/com/baeldung/jsonld/deserialization/jsonldjava/jackson/Person.java b/json-2/src/test/java/com/baeldung/jsonld/deserialization/jsonldjava/jackson/Person.java
new file mode 100644
index 0000000000..0cb6d43336
--- /dev/null
+++ b/json-2/src/test/java/com/baeldung/jsonld/deserialization/jsonldjava/jackson/Person.java
@@ -0,0 +1,19 @@
+package com.baeldung.jsonld.deserialization.jsonldjava.jackson;
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+@JsonIgnoreProperties(ignoreUnknown = true)
+public class Person {
+ @JsonProperty("@id")
+ public String id;
+ @JsonProperty("http://schema.org/name")
+ public String name;
+ @JsonProperty("http://schema.org/knows")
+ public Link knows;
+
+ public static class Link {
+ @JsonProperty("@id")
+ public String id;
+ }
+}
diff --git a/json-2/src/test/java/com/baeldung/jsonld/serialization/hydrajsonld/HydraJsonldSerializationUnitTest.java b/json-2/src/test/java/com/baeldung/jsonld/serialization/hydrajsonld/HydraJsonldSerializationUnitTest.java
new file mode 100644
index 0000000000..06105d579e
--- /dev/null
+++ b/json-2/src/test/java/com/baeldung/jsonld/serialization/hydrajsonld/HydraJsonldSerializationUnitTest.java
@@ -0,0 +1,65 @@
+package com.baeldung.jsonld.serialization.hydrajsonld;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+import org.junit.jupiter.api.Test;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.BeanDescription;
+import com.fasterxml.jackson.databind.JsonSerializer;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.SerializationConfig;
+import com.fasterxml.jackson.databind.module.SimpleModule;
+import com.fasterxml.jackson.databind.ser.BeanSerializerModifier;
+import com.fasterxml.jackson.databind.ser.std.BeanSerializerBase;
+
+import de.escalon.hypermedia.hydra.serialize.JacksonHydraSerializer;
+
+public class HydraJsonldSerializationUnitTest {
+ @Test
+ void givenAHydraJsonldAnnotatedObject_whenJacksonHydraSerializerIsUsed_thenAJsonLdDocumentIsGenerated() throws JsonProcessingException {
+ ObjectMapper objectMapper = new ObjectMapper();
+ objectMapper.registerModule(getJacksonHydraSerializerModule());
+ objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
+
+ Person person = new Person();
+ person.id = "http://example.com/person/1234";
+ person.name = "Example Name";
+
+ String personJsonLd = objectMapper.writeValueAsString(person);
+
+ assertEquals("{"
+ + "\"@context\":{"
+ + "\"@vocab\":\"http://example.com/vocab/\","
+ + "\"name\":\"fullName\""
+ + "},"
+ + "\"@type\":\"person\","
+ + "\"name\":\"Example Name\","
+ + "\"@id\":\"http://example.com/person/1234\""
+ + "}", personJsonLd);
+ }
+
+ static SimpleModule getJacksonHydraSerializerModule() {
+ return new SimpleModule() {
+
+ @Override
+ public void setupModule(SetupContext context) {
+ super.setupModule(context);
+
+ context.addBeanSerializerModifier(new BeanSerializerModifier() {
+
+ @Override
+ public JsonSerializer> modifySerializer(SerializationConfig config, BeanDescription beanDesc, JsonSerializer> serializer) {
+
+ if (serializer instanceof BeanSerializerBase) {
+ return new JacksonHydraSerializer((BeanSerializerBase) serializer);
+ } else {
+ return serializer;
+ }
+ }
+ });
+ }
+ };
+ }
+}
diff --git a/json-2/src/test/java/com/baeldung/jsonld/serialization/hydrajsonld/Person.java b/json-2/src/test/java/com/baeldung/jsonld/serialization/hydrajsonld/Person.java
new file mode 100644
index 0000000000..87587d02ac
--- /dev/null
+++ b/json-2/src/test/java/com/baeldung/jsonld/serialization/hydrajsonld/Person.java
@@ -0,0 +1,15 @@
+package com.baeldung.jsonld.serialization.hydrajsonld;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+import de.escalon.hypermedia.hydra.mapping.Expose;
+import de.escalon.hypermedia.hydra.mapping.Vocab;
+
+@Vocab("http://example.com/vocab/")
+@Expose("person")
+public class Person {
+ @JsonProperty("@id")
+ public String id;
+ @Expose("fullName")
+ public String name;
+}
diff --git a/json-2/src/test/java/com/baeldung/jsonld/serialization/jacksonjsonld/JacksonJsonLdSerializationUnitTest.java b/json-2/src/test/java/com/baeldung/jsonld/serialization/jacksonjsonld/JacksonJsonLdSerializationUnitTest.java
new file mode 100644
index 0000000000..cd41989a53
--- /dev/null
+++ b/json-2/src/test/java/com/baeldung/jsonld/serialization/jacksonjsonld/JacksonJsonLdSerializationUnitTest.java
@@ -0,0 +1,33 @@
+package com.baeldung.jsonld.serialization.jacksonjsonld;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+import org.junit.jupiter.api.Test;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+import ioinformarics.oss.jackson.module.jsonld.JsonldModule;
+
+public class JacksonJsonLdSerializationUnitTest {
+ @Test
+ void givenAJacksonJsonldAnnotatedObject_whenJsonldModuleIsUsed_thenAJsonLdDocumentIsGenerated() throws JsonProcessingException {
+ ObjectMapper objectMapper = new ObjectMapper();
+ objectMapper.registerModule(new JsonldModule());
+
+ Person person = new Person();
+ String personJsonLd = objectMapper.writeValueAsString(person);
+
+ assertEquals("{"
+ + "\"@type\":\"s:Person\","
+ + "\"@context\":{"
+ + "\"s\":\"http://schema.org/\","
+ + "\"name\":\"s:name\","
+ + "\"knows\":{\"@id\":\"s:knows\",\"@type\":\"@id\"}"
+ + "},"
+ + "\"name\":\"Example Name\","
+ + "\"@id\":\"http://example.com/person/1234\","
+ + "\"knows\":\"http://example.com/person/2345\""
+ + "}", personJsonLd);
+ }
+}
diff --git a/json-2/src/test/java/com/baeldung/jsonld/serialization/jacksonjsonld/Person.java b/json-2/src/test/java/com/baeldung/jsonld/serialization/jacksonjsonld/Person.java
new file mode 100644
index 0000000000..d0c9e4f111
--- /dev/null
+++ b/json-2/src/test/java/com/baeldung/jsonld/serialization/jacksonjsonld/Person.java
@@ -0,0 +1,19 @@
+package com.baeldung.jsonld.serialization.jacksonjsonld;
+
+import ioinformarics.oss.jackson.module.jsonld.annotation.JsonldId;
+import ioinformarics.oss.jackson.module.jsonld.annotation.JsonldLink;
+import ioinformarics.oss.jackson.module.jsonld.annotation.JsonldNamespace;
+import ioinformarics.oss.jackson.module.jsonld.annotation.JsonldProperty;
+import ioinformarics.oss.jackson.module.jsonld.annotation.JsonldResource;
+import ioinformarics.oss.jackson.module.jsonld.annotation.JsonldType;
+
+@JsonldResource
+@JsonldNamespace(name = "s", uri = "http://schema.org/")
+@JsonldType("s:Person")
+@JsonldLink(rel = "s:knows", name = "knows", href = "http://example.com/person/2345")
+public class Person {
+ @JsonldId
+ public String id = "http://example.com/person/1234";
+ @JsonldProperty("s:name")
+ public String name = "Example Name";
+}