Implemented pretty print mode for MJsonArray and MJsonObject.
authorMarco Zanon <info@marcozanon.com>
Thu, 29 Feb 2024 16:24:47 +0000 (16:24 +0000)
committerMarco Zanon <info@marcozanon.com>
Thu, 29 Feb 2024 16:24:47 +0000 (16:24 +0000)
9.x/CHANGELOG
9.x/src/main/java/com/marcozanon/macaco/MConstants.java
9.x/src/main/java/com/marcozanon/macaco/json/MJsonArray.java
9.x/src/main/java/com/marcozanon/macaco/json/MJsonBoolean.java
9.x/src/main/java/com/marcozanon/macaco/json/MJsonNull.java
9.x/src/main/java/com/marcozanon/macaco/json/MJsonNumber.java
9.x/src/main/java/com/marcozanon/macaco/json/MJsonObject.java
9.x/src/main/java/com/marcozanon/macaco/json/MJsonString.java
9.x/src/main/java/com/marcozanon/macaco/json/MJsonValue.java

index 4a8a66018980d6b9cbdb2fac3cfc0db3f74bd828..01b6c911d848434c8c097f07939c88278bc52c34 100644 (file)
@@ -5,6 +5,7 @@ See LICENSE for details.
 ------------------
 9.1.0 (2024-02-29)
 ------------------
+* Implemented pretty print mode for MJsonArray and MJsonObject.
 * Implemented automatic stripping of newline characters when loading JSON objects.
 * Upgraded copyright notice to year 2024.
 
index 2841b92568e049240330e373671b1746743738eb..e3e391fcf6be26b267dd41741fa30007379c2c93 100644 (file)
@@ -19,6 +19,9 @@ public class MConstants extends MObject {
 
     public static final Charset DEFAULT_CHARSET = StandardCharsets.UTF_8;
 
+    public static final String JSON_PRETTY_PRINT_MODE_EOL = "\r\n";
+    public static final int JSON_PRETTY_PRINT_MODE_INDENTATION = 2; // characters
+
     /* Threads. */
 
     public static final String LOG_FILTER_MARK_MESSAGE_APPENDER_THREAD_ID = "logFilterMarkMessageAppender";
index 7b0a138fa487e9409b9da5aa03d92d3867397f51..9a9c4a7759d8154c22280216e4a933440e4befe0 100644 (file)
@@ -6,6 +6,7 @@
 
 package com.marcozanon.macaco.json;
 
+import com.marcozanon.macaco.MConstants;
 import com.marcozanon.macaco.text.MText;
 import java.util.LinkedList;
 
@@ -204,14 +205,44 @@ public class MJsonArray extends MJsonValue {
 
     @Override
     public String getJsonValue() {
+        return this.getJsonValue(false);
+    }
+
+    @Override
+    public String getJsonValue(boolean prettyPrintMode) {
+        return this.getJsonValue(prettyPrintMode, 0);
+    }
+
+    @Override
+    protected String getJsonValue(boolean prettyPrintMode, int leftMargin) {
         StringBuilder s = new StringBuilder("");
         //
         s.append("[");
+        if (prettyPrintMode) {
+            s.append(MConstants.JSON_PRETTY_PRINT_MODE_EOL);
+        }
         for (int i = 0; this.getValueCount() > i; i++) {
             if (0 < i) {
-                s.append(", ");
+                s.append(",");
+                if (prettyPrintMode) {
+                    s.append(MConstants.JSON_PRETTY_PRINT_MODE_EOL);
+                }
+                else {
+                    s.append(" ");
+                }
+            }
+            if (prettyPrintMode) {
+                for (int l = 0; (leftMargin + MConstants.JSON_PRETTY_PRINT_MODE_INDENTATION) > l; l++) {
+                    s.append(" ");
+                }
+            }
+            s.append(this.getValues().get(i).getJsonValue(prettyPrintMode, leftMargin + MConstants.JSON_PRETTY_PRINT_MODE_INDENTATION));
+        }
+        if (prettyPrintMode) {
+            s.append(MConstants.JSON_PRETTY_PRINT_MODE_EOL);
+            for (int l = 0; leftMargin > l; l++) {
+                s.append(" ");
             }
-            s.append(this.getValues().get(i).getJsonValue());
         }
         s.append("]");
         //
index 0acb608d9eefff5f4dbc0791bbf73851e40955f0..8fd84904e78cfeff292077e452a394455fc87267 100644 (file)
@@ -86,7 +86,16 @@ public class MJsonBoolean extends MJsonValue {
 
     @Override
     public String getJsonValue() {
-        return this.getValue().toString();
+        return this.getJsonValue(false);
+    }
+
+    @Override
+    public String getJsonValue(boolean prettyPrintMode) {
+        return this.getJsonValue(prettyPrintMode, 0);
     }
 
+    @Override
+    protected String getJsonValue(boolean prettyPrintMode, int leftMargin) {
+        return this.getValue().toString();
+    }
 }
index ab8a0548cbabb8667e8bf09b2cfea46ddac76fe6..30f959c2435967d13745044ece6de5623e56981f 100644 (file)
@@ -65,7 +65,16 @@ public class MJsonNull extends MJsonValue {
 
     @Override
     public String getJsonValue() {
-        return "null";
+        return this.getJsonValue(false);
+    }
+
+    @Override
+    public String getJsonValue(boolean prettyPrintMode) {
+        return this.getJsonValue(prettyPrintMode, 0);
     }
 
+    @Override
+    protected String getJsonValue(boolean prettyPrintMode, int leftMargin) {
+        return "null";
+    }
 }
index 11c68c699c9b8154acb839a30af081b9c8f38df5..f2814877eb540f354e5bafde7bddd3a4ea3d8981 100644 (file)
@@ -109,7 +109,16 @@ public class MJsonNumber extends MJsonValue {
 
     @Override
     public String getJsonValue() {
-        return this.getValue().toString();
+        return this.getJsonValue(false);
+    }
+
+    @Override
+    public String getJsonValue(boolean prettyPrintMode) {
+        return this.getJsonValue(prettyPrintMode, 0);
     }
 
+    @Override
+    protected String getJsonValue(boolean prettyPrintMode, int leftMargin) {
+        return this.getValue().toString();
+    }
 }
index 58bea7f631c0ac586ef2d99637787bca0fd002e1..78bb4fda760b33949c68db2948a22fadf5a539ce 100644 (file)
@@ -6,6 +6,7 @@
 
 package com.marcozanon.macaco.json;
 
+import com.marcozanon.macaco.MConstants;
 import com.marcozanon.macaco.text.MText;
 import java.util.LinkedHashMap;
 import java.util.LinkedHashSet;
@@ -257,19 +258,49 @@ public class MJsonObject extends MJsonValue {
 
     @Override
     public String getJsonValue() {
+        return this.getJsonValue(false);
+    }
+
+    @Override
+    public String getJsonValue(boolean prettyPrintMode) {
+        return this.getJsonValue(prettyPrintMode, 0);
+    }
+
+    @Override
+    protected String getJsonValue(boolean prettyPrintMode, int leftMargin) {
         StringBuilder s = new StringBuilder("");
         //
         s.append("{");
+        if (prettyPrintMode) {
+            s.append(MConstants.JSON_PRETTY_PRINT_MODE_EOL);
+        }
         int k = 0;
         for (String key: this.getValues().keySet()) {
             if (0 < k) {
-                s.append(", ");
+                s.append(",");
+                if (prettyPrintMode) {
+                    s.append(MConstants.JSON_PRETTY_PRINT_MODE_EOL);
+                }
+                else {
+                    s.append(" ");
+                }
+            }
+            if (prettyPrintMode) {
+                for (int l = 0; (leftMargin + MConstants.JSON_PRETTY_PRINT_MODE_INDENTATION) > l; l++) {
+                    s.append(" ");
+                }
             }
             s.append("\"" + MJsonString.getEscapedString(key, false) + "\"");
             s.append(": ");
-            s.append(this.getValues().get(key).getJsonValue());
+            s.append(this.getValues().get(key).getJsonValue(prettyPrintMode, leftMargin + MConstants.JSON_PRETTY_PRINT_MODE_INDENTATION));
             k++;
         }
+        if (prettyPrintMode) {
+            s.append(MConstants.JSON_PRETTY_PRINT_MODE_EOL);
+            for (int l = 0; leftMargin > l; l++) {
+                s.append(" ");
+            }
+        }
         s.append("}");
         //
         return s.toString();
index 5f3108c5771c42afca40805410f1f1e88a10aec2..aac7f2a813facf4fa2e006a0317416e3802cd3b7 100644 (file)
@@ -299,7 +299,16 @@ public class MJsonString extends MJsonValue {
 
     @Override
     public String getJsonValue() {
-        return "\"" + MJsonString.getEscapedString(this.getValue(), this.getExtendedEscapeMode()) + "\"";
+        return this.getJsonValue(false);
+    }
+
+    @Override
+    public String getJsonValue(boolean prettyPrintMode) {
+        return this.getJsonValue(prettyPrintMode, 0);
     }
 
+    @Override
+    protected String getJsonValue(boolean prettyPrintMode, int leftMargin) {
+        return "\"" + MJsonString.getEscapedString(this.getValue(), this.getExtendedEscapeMode()) + "\"";
+    }
 }
index a3ac7868550a7050020ea998428b53f520cd471a..9518e948687cd9f505f9800e6ddb97380fac31cd 100644 (file)
@@ -41,4 +41,8 @@ public abstract class MJsonValue extends MObject {
 
     public abstract String getJsonValue();
 
+    public abstract String getJsonValue(boolean prettyPrintMode);
+
+    protected abstract String getJsonValue(boolean prettyPrintMode, int leftMargin);
+
 }