Index: src/main/resources/fxml/mainScene.fxml
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
--- src/main/resources/fxml/mainScene.fxml	(revision dbc9c10b8a607e7ff939f603db97dae122bcc29b)
+++ src/main/resources/fxml/mainScene.fxml	(date 1544774332456)
@@ -223,7 +223,11 @@
                         </Tab>
                         <Tab text="Value">
                             <content>
-                                <TextArea fx:id="valueTextArea" editable="false" prefHeight="200.0" prefWidth="200.0"/>
+                                <HBox>
+                                    <TreeView fx:id="jsonTreeView" editable="false" prefHeight="200.0"/>
+                                    <TextArea fx:id="valueTextArea" editable="false" prefHeight="200.0"
+                                              prefWidth="200.0" HBox.hgrow="ALWAYS"/>
+                                </HBox>
                             </content>
                         </Tab>
                         <Tab text="Header">
Index: src/main/java/com/modulo/kafkaesque/Controller.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
--- src/main/java/com/modulo/kafkaesque/Controller.java	(revision dbc9c10b8a607e7ff939f603db97dae122bcc29b)
+++ src/main/java/com/modulo/kafkaesque/Controller.java	(date 1544785811155)
@@ -100,6 +100,8 @@
     @FXML
     private TextArea valueTextArea;
     @FXML
+    public TreeView<String> jsonTreeView;
+    @FXML
     private TableView<Header> headerTableView;
     @FXML
     private TableColumn<Header, String> headerKeyColumn;
@@ -252,12 +254,57 @@
         if (formatJson) {
             keyTextArea.setText(formatJson(selectedMessage.getKey()));
             valueTextArea.setText(formatJson(selectedMessage.getValue()));
+            try {
+                Map<String, Object> json = objectMapper.readValue(selectedMessage.getValue(), Map.class);
+                TreeItem<String> root = new TreeItem<>("root");
+                recursivelyAddElements(json, root);
+                jsonTreeView.setRoot(root);
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
         } else {
             keyTextArea.setText(selectedMessage.getKey());
             valueTextArea.setText(selectedMessage.getValue());
         }
     }
 
+    private void recursivelyAddElements(Map<String, Object> jsonNode, TreeItem<String> treeItem) {
+        Set<Map.Entry<String, Object>> entries = jsonNode.entrySet();
+
+        if (!entries.isEmpty()) {
+            for (Map.Entry<String, Object> entry : entries) {
+                TreeItem<String> newItem = new TreeItem<>(entry.getKey());
+                treeItem.getChildren().add(newItem);
+                applyCorrectAdder(entry.getValue(), newItem);
+            }
+        }
+    }
+
+    private void recursivelyAddElements(ArrayList values, TreeItem<String> treeItem) {
+        int i = 1;
+        for (Object val : values) {
+            TreeItem<String> newItem = new TreeItem<>(i + "");
+            treeItem.getChildren().add(newItem);
+            applyCorrectAdder(val, newItem);
+            i++;
+        }
+    }
+
+    private void recursivelyAddElements(String val, TreeItem<String> treeItem) {
+        treeItem.getChildren().add(new TreeItem<>(val));
+    }
+
+    private void applyCorrectAdder(Object value, TreeItem<String> treeItem) {
+        if (value instanceof Map) {
+            recursivelyAddElements((Map) value, treeItem);
+        }else if (value instanceof ArrayList) {
+            recursivelyAddElements((ArrayList) value, treeItem);
+        } else {
+            recursivelyAddElements((String.valueOf(value)), treeItem);
+        }
+    }
+
+
     /* TODO can be extracted to a JsonUtil */
     private String formatJson(String string) {
         try {
@@ -952,7 +999,7 @@
             String identifier = matcher.group("identifier");
             String type = matcher.group("type");
 
-            Object replacement;
+            Serializable replacement;
             switch (type) {
                 case "UUID":
                     replacement = UUID.randomUUID();
