diff --git a/json-modules/json-conversion/pom.xml b/json-modules/json-conversion/pom.xml
index 365c6d2ac9..680f27fa38 100644
--- a/json-modules/json-conversion/pom.xml
+++ b/json-modules/json-conversion/pom.xml
@@ -29,11 +29,17 @@
jackson-databind
${jackson.version}
+
+ com.google.guava
+ guava
+ ${guava.version}
+
20211205
2.10.1
+ 32.1.2-jre
diff --git a/json-modules/json-conversion/src/main/java/com/baeldung/jsontomap/FlattenUtils.java b/json-modules/json-conversion/src/main/java/com/baeldung/jsontomap/FlattenUtils.java
new file mode 100644
index 0000000000..2fd49d99ad
--- /dev/null
+++ b/json-modules/json-conversion/src/main/java/com/baeldung/jsontomap/FlattenUtils.java
@@ -0,0 +1,36 @@
+package com.baeldung.jsontomap;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+public class FlattenUtils {
+ public static Map flatten(Map map) {
+ return flatten(map, null);
+ }
+
+ private static Map flatten(Map map, String prefix) {
+ Map flatMap = new HashMap<>();
+ map.forEach((key, value) -> {
+ String newKey = prefix != null ? prefix + "." + key : key;
+ if (value instanceof Map) {
+ flatMap.putAll(flatten((Map) value, newKey));
+ } else if (value instanceof List) {
+ // check for list of primitives
+ Object element = ((List>) value).get(0);
+ if (element instanceof String || element instanceof Number || element instanceof Boolean) {
+ flatMap.put(newKey, value);
+ } else {
+ // check for list of objects
+ List